6

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

4

1 回答 1

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)您可以循环通过此条件(是循环,但它不会循环通过单个行,而是通过条件而不是例如 1 - 100, 101 - 200、201 - 300 等)。

于 2013-08-26T16:21:02.130 回答