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