【发布时间】:2017-11-10 23:19:38
【问题描述】:
我创建了一个以 SELECT 语句为值的 tbl(字段名 sqltxt)。
现在要逐行读取并执行存储在此表中的所有选择语句。
如果它不返回任何行,即零行
在 DMSResults 中插入一条新记录,其值为来自 DMSRec 的 DOCID 为此,我使用以下脚本
set nocount on
use TESTDB
declare @sqlTXT as varchar(max);
DECLARE @DocID nvarchar(30);
drop table DMSResults
CREATE TABLE DMSResults (DOCID nvarchar(30) );`
drop table DMSRec
SELECT .....转入DMSRec FROM tbl....
以上语法是用于创建记录集的 Big SQl 脚本。
为了我的运输,我将所有记录插入到新的 tbl 中。
它返回超过 10,00,000 条记录
现在想在tbl DMSREC中循环,读取字段sqltxt的值
执行该语句。
如果它没有返回记录 在 DMSResults 中插入一条记录,其值为 DOCID 字段。
我也尝试了以下命令,但不知道如何在 sql 中循环进行下一个记录,直到 eof 并退出
由于 DMSRec 是一个临时表,一旦处理了一行,我们就可以从 DMSRec 中删除记录。
declare @rc as bigint
Select @rc = Row_Count
From sys.dm_db_partition_stats
Where Object_Name(Object_Id) = 'DMSRec'
WHILE @rc <1
BEGIN
exec(select sqltxt from dmsrec where row=1)
-- here check record is exist or not then
-- if it is not exist or returning zero
-- add record in dmsresult with docid value
-- delete dmsrec where row=1
-- loop for next
END
考虑到数据库 SQL-Server 2008r2 的庞大规模,请指导我任何优化解决方案。
DMSRec TBL 记录集。
DOCID SQLTXT
A01/17-18 从 TBL_LET 中选择 VRNO,其中 VRNO='A01/17-18'
【问题讨论】:
-
您的循环没有意义...请问您为什么将语句存储在表中?
-
基本上我想检查一些不匹配的主&交易记录。为此,我从不同的表中收集一些值并动态创建 sql 语句来检查需要记录。如果没有那些记录(DOCID 的值),则执行此 SQL 后。虽然我不是技术人员,但我已经写过我的记录,我存储了我的运输记录。如果您在不将记录存储到 tbl 的情况下进行引导,则没有问题。如果整个问题令人困惑,请告诉我如何在 sql 中循环并捕获零记录结果。