你能在T-Sql中做一个FOREACH循环吗?

时间:2016-08-03 10:05:50

标签: sql-server tsql

我是SQL Server的新手,我遇到了很大麻烦。 我想为idp列@ table1的每个值执行更新查询。 LaysName列的值为NULL。 我的简单问题是:如何循环@ table1? 这是我的剧本:

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

谢谢大家!

3 个答案:

答案 0 :(得分:4)

无需循环。您可以使用UPDATE FROM

<!DOCTYPE html>
<html>

<head>
  <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <style>
    @media(max-width: 991px) {
      .pull-right,
      .pull-left {
        float: none!important;
      }
    }
  </style>
</head>

<body>
  <div class="row" style="height:500px;">
    <div class="col-md-6 pull-right" style="height:25%;background:#080;color:#fff;text-align:center;">2</div>
    <div class="col-md-6 pull-left" style="height:50%;background:#080;color:#fff;text-align:center;">1</div>
    <div class="col-md-6 pull-right" style="height:25%;background:#080;color:#fff;text-align:center;">3</div>
  </div>
</body>

</html>

答案 1 :(得分:0)

使用基于设置的方法..

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

答案 2 :(得分:0)

更新可以同时处理多条记录。你也不需要本地表。看看这个查询:

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

如果你真的想使用@ table1(它的例子?)你可以使用:

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

但是,正如我所说,我更喜欢直接转移。