2017-08-11 56 views
0

我在SQL Server 2012中两个表结构如下:批量更新存储过程与选择,并加入在where子句

customer 
- internalId 
- listingStatus 
- inactive 
membership 
- custIntneralId 
- regDate 

这里是我使用SELECT语句:

USE [dbOne] 
SELECT DISTINCT(t1.internalId) 
FROM customer AS t1 
INNER JOIN membership AS t2 ON t1.internalId = t2.custInternalId 
WHERE t1.internalId = t2.custInternalId 
AND t1.inactive = 0 
AND t1.listingStatus = '' 

这里是UPDATE语句,如果我要使用循环按行插入行:

UPDATE customer SET listingStatus = '6' WHERE internalId=custInternalId 

因为我婉吨做批量更新而不是逐行,我试图写一个存储过程,我可以触发进行批量更新。我尝试了几种不同的方式来编写它,但一直无法让它们工作。以下是我已经尝试了一个存储过程的例子:

USE [dbOne] 
UPDATE customer 
SET customer.listingStatus = '6' 
FROM customer AS t1 
INNER JOIN membership AS t2 ON t1.internalId = t2.custInternalId 
WHERE t1.internalId = t2.custInternalId 
AND t1.inactive = 0 
AND t1.listingStatus = '' 

我也试图把select语句的UPDATE语句的WHERE子句中,没有工作里面。我看不到我错过了什么,任何人都可以帮助我?

回答

0

在SQL Server中,您可以将表别名指定为更新目标。你不必前缀列名,因为你只能使用一个单一的更新来更新一个表:

UPDATE t1 
SET  custentity_iahp_listing_status = '6' 
FROM customer AS t1 
JOIN MembershipPurchaseHistory AS t2 
ON  t1.internalId = t2.custInternalId 
WHERE t1.inactive = 0 
     AND t1.custentity_iahp_listing_status = '' 

无需重复ON子句WHERE子句中,这就是被照顾。

请注意,在您的SELECT查询中,您加入了membership表,但更新加入了MembershipPurchaseHistory表。这可能会产生不同的结果。