繁体   English   中英

在SQL Server 2008 R2的单个存储过程中使用更新,删除和插入语句

[英]Using Update, Delete and Insert Statements in a single Stored Procedure on SQL Server 2008 R2

我有一种情况,要求我首先将表中的列值范围设置为Null,然后添加逻辑以使用上一条Update语句之后的Update语句重新计算新的NULL值。 最后,我运行最终的比较脚本(在光标内),该脚本将新值插入表中。

我需要在每个主要命令之间使用GO命令吗?

例:

Drop Table1

Update Table2
Set Col1=NULL,Col2=NULL

Insert into Table3 (Col1,Col2)

在每个语句之间使用GO是一项要求,因为有时这可行,但最近却给我带来了问题?

谢谢,

如上所述, GO不是SQL语法,而是SSMS分隔符。

如果确实需要在单个SP中执行所有这些操作,则可以使用动态SQL。 “在SQL Server中执行动态SQL的两种能力” sp_executesqlexecute(命令)

可以在以下位置找到根据动态SQL的其他信息: http : //www.sommarskog.se/dynamic_sql.html或此处: http : //www.codeproject.com/Articles/20815/Building-Dynamic-SQL-In-存储过程

在这种情况下,您的脚本将如下所示:

create proc myProc
as
declare @sql nvarchar(max);

set @sql = N'Drop Table1';
exec sp_executesql @sql;

set @sql = N'Update Table2
Set Col1=NULL,Col2=NULL';
exec sp_executesql @sql;

set @sql = N'Insert into Table3 (Col1,Col2)';
exec sp_executesql @sql;
go

但是需要检查您是否真的需要以上述方式执行上述操作...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM