循环遍历SQL中的SELECT结果集
发布时间:2020-05-28 14:10:29 所属栏目:MsSql 来源:互联网
导读:我甚至不确定怎么说这个问题但是这里有.我需要能够在同一个SQL脚本中循环遍历结果集,并在更多SQL中使用结果. 例如 beginSELECT (SELECT ColumnA, ColumnB from SomeTable) as xloop through x( INSERT ColumnA into TableA INSERT ColumnB into TableB
|
我甚至不确定怎么说这个问题但是这里有.我需要能够在同一个SQL脚本中循环遍历结果集,并在更多SQL中使用结果. 例如 begin
SELECT (SELECT ColumnA,ColumnB from SomeTable) as x
loop through x(
INSERT ColumnA into TableA
INSERT ColumnB into TableB
)
end
但我忘了这样做的确切方法.我知道我之前的位置已经完成了,但我找不到该公司文件中的代码. 显然,这是一个非常粗略和基本的例子,我计划用结果集做更多的事情,但我只是以此为例. 编辑:以下是我希望做的更接近的例子,以防这有用. begin
while(select columnA,columnB,columnC,columnD from myTable) as x
begin
INSERT columnA,columnB into TableA
(get newly created ID of TableA - but that's a separate question involving @@IDENTITY)
INSERT NewID,columnD into TableB
end loop
end
解决方法处理以集合方式获取身份的常用方法是通过OUTPUT条款:
INSERT INTO TableA (ColumnA,ColumnB) OUTPUT inserted.Id,inserted.ColumnA,inserted.ColumnB SELECT ColumnA,ColumnB FROM MyTable; 这里的问题是你理想的做法是: INSERT INTO TableA (ColumnA,MyTable.ColumnC,inserted.ColumnD
INTO TableB (AID,ColumnC,ColumnD)
SELECT ColumnA,ColumnB
FROM MyTable;
问题是您无法在OUTPUT中引用源表,只能引用目标.幸运的是,有一个使用MERGE的解决方法,因为这允许您使用引用驻留内存插入表和输出子句中的源表,如果您在永远不会为真的情况下使用MERGE您可以输出所有你需要的列: WITH x AS
( SELECT ColumnA,ColumnB,ColumnD
FROM MyTable
)
MERGE INTO TableA AS a
USING x
ON 1 = 0 -- USE A CLAUSE THAT WILL NEVER BE TRUE
WHEN NOT MATCHED THEN
INSERT (ColumnA,ColumnB)
VALUES (x.ColumnA,x.ColumnB)
OUTPUT inserted.ID,x.ColumnC,x.ColumnD INTO TableB (NewID,ColumnD);
此方法的问题是SQL Server不允许您插入外键关系的任何一侧,因此如果tableB.NewID引用tableA.ID,则上述操作将失败.要解决此问题,您需要输出到临时表,然后将临时表插入TableB: CREATE TABLE #Temp (AID INT,ColumnC INT,ColumnD INT); WITH x AS ( SELECT ColumnA,x.ColumnD INTO #Temp (AID,ColumnD); INSERT TableB (AID,ColumnD) SELECT AID,ColumnD FROM #Temp; Example on SQL Fiddle (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql – 如何创建可选择搜索列的存储过程?
- 重装MS SQL Server 2000前必须彻底删除原安装文件的方法
- T-SQL输出条款:如何访问旧的身份标识
- sql-server – 我应该在完整备份期间停止事务日志备份吗?
- 您最喜欢的调试MS SQL存储过程的方法是什么?
- sql server中判断表或临时表是否存在的方法
- sql-server – 如何在Sql Server中存储’n’天的Web服务器日
- sql-server – 为什么这个显式转换只会导致链接服务器出现问
- .net – SqlCommand查询长度的限制是什么
- SQL Server insert into 和insert into select性能比较
