理想情况下,我希望将多个sql语句作为单个exec sp_executesql语句执行。一个例子是,我使用一个IF EXISTS以确定是否运行第二个声明:sp_execute用于多个动态T-SQL语句ak批处理
drop proc ai_ImportDataAddListPosn
go
create proc ai_ImportDataAddListPosn(@ParamTableName NVARCHAR(255), @debug INT)
AS
BEGIN
DECLARE @sql AS NVARCHAR(4000)
SET @sql = N'IF NOT EXISTS(SELECT * FROM syscolumns INNER JOIN sysobjects ON syscolumns.id = sysobjects.id WHERE sysobjects.name = ''' + @ParamTableName + ''' AND Syscolumns.name = ''ListPosn'');'
+ 'alter table [' + @ParamTableName + '] add ListPosn int identity(1,1)'
IF @debug = 1 PRINT @sql
EXEC sp_executesql @sql
END
Go
EXEC ai_ImportDataAddListPosn DeptForMove, 1
我意识到,这个例子不测试表存在第一,它只是一个简单的例子并不是真正的问题。我也意识到SQL注入以及如何对付它。我相当高兴,两个陈述都很好SQL
我以为“;”可能作为语句终结者
您需要在'alter'之前插入一个换行符。 –