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

时间:2013-11-01 11:49:52

标签: sql sql-server tsql sql-server-2008-r2

我有一个场景要求我首先将表中的列值范围设置为Null,然后添加逻辑以使用NULL语句重新计算新的Update值之前的Update声明。最后,我运行我的最终比较脚本(在游标中),将新值插入表中。

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

示例:

Drop Table1

Update Table2
Set Col1=NULL,Col2=NULL

Insert into Table3 (Col1,Col2)

在每个陈述之间使用GO一个要求,因为有时这有效但最近它给了我一些问题吗?

谢谢,

1 个答案:

答案 0 :(得分:1)

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

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

可以在此处找到根据动态SQL的其他信息:http://www.sommarskog.se/dynamic_sql.html或此处:http://www.codeproject.com/Articles/20815/Building-Dynamic-SQL-In-a-Stored-Procedure

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

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

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