SQL Server:不使用游标将数据从一个表复制到另一个表
您好,我必须将数据从一个表迁移到另一个表,我希望避免使用游标 使用光标将非常容易,因为我必须执行以下操作:SQL Server:不使用游标将数据从一个表复制到另一个表,sql,sql-server,tsql,Sql,Sql Server,Tsql,您好,我必须将数据从一个表迁移到另一个表,我希望避免使用游标 使用光标将非常容易,因为我必须执行以下操作: DECLARE db_cursor CURSOR FOR select Id, dataToMigrate from OriginTable where bar <> 'foo' OPEN db_cursor FETCH NEXT FROM db_cursor into @Id, @DataToMigrate WHILE @@FETCH_STATUS = 0 BEGIN
DECLARE db_cursor CURSOR FOR
select Id, dataToMigrate
from OriginTable
where bar <> 'foo'
OPEN db_cursor
FETCH NEXT FROM db_cursor into @Id, @DataToMigrate
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE DestinationTable
SET Value = @DataToMigrate
Where Id = @Id
FETCH NEXT FROM db_cursor into @Id, @DataToMigrate
END
CLOSE db_cursor
DEALLOCATE db_cursor
UPDATE dt
SET Value = ot.dataToMigrate
FROM DestinationTable dt
JOIN OriginTable ot
ON dt.Id = ot.Id
WHERE bar <> 'foo'
DECLARE db\u游标
选择Id,dataToMigrate
从原始表
“福”酒吧在哪里
打开db_光标
从db_游标提取下一个到@Id,@DataToMigrate
而@@FETCH\u STATUS=0
开始
更新DestinationTable
设置值=@DataToMigrate
其中Id=@Id
从db_游标提取下一个到@Id,@DataToMigrate
结束
关闭db_光标
取消分配db_游标
然而,这感觉是错误的。我相信一定有一种更简单、更聪明的方法,不用光标就能做到这一点
有人知道更好的方法吗?是的,光标是完全错误的方法。为寻找更好的方法而自豪。您可以通过一个简单的update语句来实现这一点
update d
set Value = o.DataToMigrate
from DestinationTable d
join OriginTable o on o.SomeColumn = d.SomeColumn
where o.bar <> 'foo'
updated
设置值=o.DataToMigrate
从预定表d
连接o.SomeColumn=d.SomeColumn上的原始表o
o.bar'foo'在哪里
基于集合的解决方案是您的最佳选择。您可以将UPDATE
与JOIN
一起使用。您需要知道,这只是更新您的行,而不是插入任何数据
UPDATE D
SET D.Value = O.dataToMigrate
FROM DestinationTable D
INNER JOIN OriginTable O
ON D.Id = O.Id
WHERE O.bar <> 'foo'
updated
设置D.值=O.数据迁移率
从预定表D
内联接原始表
在D.Id=O.Id上
O.bar'foo'在哪里
据我所知,这可以通过UPDATE语句来完成
这是从内存中提取的,但看起来是这样的:
DECLARE db_cursor CURSOR FOR
select Id, dataToMigrate
from OriginTable
where bar <> 'foo'
OPEN db_cursor
FETCH NEXT FROM db_cursor into @Id, @DataToMigrate
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE DestinationTable
SET Value = @DataToMigrate
Where Id = @Id
FETCH NEXT FROM db_cursor into @Id, @DataToMigrate
END
CLOSE db_cursor
DEALLOCATE db_cursor
UPDATE dt
SET Value = ot.dataToMigrate
FROM DestinationTable dt
JOIN OriginTable ot
ON dt.Id = ot.Id
WHERE bar <> 'foo'
更新dt
设置值=ot.dataToMigrate
来自DestinationTable dt
联接原始表
ON dt.Id=ot.Id
“福”酒吧在哪里
语法必须完全正确,但很有可能连接两个表并从另一个表中更新一个表 使用sub-select不会有帮助吗?where子句REQUIRIEDOPS忘记了这一点这基本上就像做一个选择,然后将数据从结果数据集的一列复制到另一列?