複数のSQL文を単一のexec sp_executesql文として実行したいのが理想です。複数の動的T-SQL文に対するsp_executeバッチの実行
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
私は、この例では、最初のテーブルが存在するかどうかをテストしないことを認識し、そのわずか簡単な例ではない本当の私は1 IFが第二の文が実行されるかどうかを判断するために存在する使用場所の例は次のようになります問題。私はSQLインジェクションとそれとの戦いを知っています。私は合理的に両方のステートメントが良いと幸せですSQL
私は ";ステートメントターミネーターとして動作する可能性があります
改行の前に改行を挿入する必要があります。 –