用于批量执行多个动态T-SQL语句



理想情况下,我希望将多个sql语句作为单个exec sp_executesql语句执行。例如,我使用IF EXISTS来确定是否运行第二条语句:

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

我认为";"可以作为语句结束符

我也知道SQL注入和如何打击它。我是合理的很高兴这两个语句都是好的SQL

在这个问题中没有足够的证据证明这一点。你应该使用参数化和QUOTENAME

我认为";"可以作为语句结束符

可以,但你不希望在那里有语句结束符。

IF 1=1; SELECT 'Foo';

是无效的语法。

IF 1=1 SELECT 'Foo';
但是

可以正常工作。您只需要将Boolean_expression后面的分号替换为空白。

相关内容

  • 没有找到相关文章

最新更新