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

最佳答案

只好查了一下“lakh”是什么:)

正如其他评论提到的那样,这不是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语句控制插入的次数(例如一次执行100次INSERT的WHERE ID BETWEEN 1 and 100)。您可以通过此条件进行循环(是循环,但它不会通过单个行循环,而可以通过条件eg1- 100、101-200、201-300等)。

关于sql - 执行存储在表的列中的动态SQL语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18445779/

10-12 22:16