执行存储在表的列中的动态SQL语句

时间:2013-08-26 13:50:34

标签: sql sql-server database tsql

我有一个表,它在表的一列中存储动态构造的T SQL查询。我的要求是我需要执行形成的查询(在我的例子中,一些插入语句)并且我'不想使用while循环'遍历整行然后执行来自a的语句变量。另外我不想使用光标。该表有大约500万个动态形成的SQL插入语句。我之前使用while循环尝试了这个东西,但是需要几天才能完成,所以我放弃了它。

1 个答案:

答案 0 :(得分:4)

不得不查看“十字架”是什么:)

正如其他评论所提到的,这不是DML的最佳方法,请考虑重构。因为它可以批量组合动态SQL,例如:

DECLARE @sSQL nvarchar(max)
SET @sSQL = 'BEGIN TRAN; '

SELECT @sSQL = @sSQL + COLUMN_WITH_INSERT_STATEMENT  + '; '
FROM TABLE
WHERE [limit number of rows]

SET @sSQL = @sSQL + 'COMMIT TRAN '

EXEC(@sSQL)

这样,您可以将受控数量的INSERT语句组合到单个事务中。您可以通过WHERE语句控制插入的数量(例如WHERE ID BETWEEN 1 and 100一次执行100个INSERT)您可以循环通过这个条件(是循环,但它不会循环通过单个行,但通过条件而是eg1 - 100,101 - 200,201 - 300等)。