2016-08-03 5 views
-1

私はSQL Serverの初心者ですが、大きな問題があります。 idp column @ table1の各値に対して更新クエリを実行します。 LaysName列の値はNULLです。 私の簡単な質問は:どのように@ table1をループすることができますか?ここ は私のスクリプトです:T-SqlでFOREACHループを実行できますか?

DECLARE @table1 TABLE (idp) 
INSERT into @table1 SELECT NCid FROM dbo.NorthwindCustomer 

    FOREACH idp in @table1 
    BEGIN 
     UPDATE dbo.LaysCustomer 
     SET LaysName = (SELECT Name FROM dbo.NorthwindCustomer WHERE NCid = idp) 
     WHERE LCid = idp 
    END 

は、すべてに感謝します!

+0

ループは必要ありません。UPDATEは一度に多くのレコードを変更できます。 Wchich列を更新しますか? –

+0

@PawełDyl私はdbo.LaysCustomerテーブル – mynhylisti

答えて

4

ループは不要です。 UPDATE FROMを使用できます。

UPDATE dbo.LaysCustomer 
SET LaysName = T.Name 
FROM dbo.NorthwindCustomer T 
WHERE 
    LaysCustomer.LCid = T.NCid 
+0

のLaysName列を更新する前に、クエリを実行する前に、LaysName列の値がNULLであることを伝えたいと思います。 – mynhylisti

+0

@mynhylistiあなたは、 'LaysName'がヌルであれば更新するのですか? – NEER

0

利用セット・ベースのアプローチ。..

UPDATE c 
set c.name=n.name 
from 
dbo.LaysCustomer c 
join 
dbo.NorthwindCustomer n 
on 
N.NCid =c.idp 
+0

質問を実行する前に、LaysName列の値がNULLであることを伝えたいと思います。 – mynhylisti

0

Updateが一度に多くのレコードを扱うことができます。ローカルテーブルは必要ありません。私は直接転送を好む、言ったように、

DECLARE @table1 TABLE (idp int) 
INSERT into @table1 SELECT NCid FROM dbo.NorthwindCustomer 

UPDATE dbo.LaysCustomer SET LaysName=C.Name 
FROM dbo.NorthwindCustomer C 
JOIN @table1 T ON C.NCid=T.idp 
WHERE LCid=C.NCid 

しかし:あなたは本当にTABLE1 @使用したい場合は

UPDATE dbo.LaysCustomer SET LaysName=C.Name 
FROM dbo.NorthwindCustomer C 
WHERE LCid=C.NCid 

(それは一例だ?)あなたが使用することができます。このクエリを見てみましょう。

関連する問題