WHILE @nxt < @rc
BEGIN
set @sql = (select Rec from DmsRec where row=@nxt)
use TestDB1
exec (@sql)
select @rc_child = @@ROWCOUNT
use MyTempDB
if @rc_child = 0
begin
insert into DMSResults
select DOCID from DmsRec where row=@nxt
end
set @nxt = @nxt + 1
END
我的问题是我如何隐藏显示exec命令的结果。 (使用Sql Server 2008r2)以上查询是完整过程的一小部分。
访问多个条件,值和多个数据库我生成一个select语句并存储在 Rec Field 中的表DmsRec
生成require Select ....语句后,我将其存储到表DmsRec中。
例如SELECT ACCD FROM M_TABLE WHERE 1=1 and ACCD='0034422'
。
此select语句存储为表DmsRec中的值 想要在不同的数据库中执行。
所以我使用use
命令并更改数据库名称,访问记录集。
如果执行的sql (返回0行)则运行在不同数据库中执行的insert
命令。
通过这个,我开始知道插入 docid 到 DMSResults 是那些主人不是avalialbel的tranaction。
它完美无缺,但无法隐藏显示exec命令的记录。
我运行exec(@sql)
只是为了检查它是否返回任何行。
并将rowcount值存储到变量中。
但是不想在网格中显示记录(同时结果{affected rows}应该存储在变量中)。
无需手动更改SSMS中的选项,即 工具/选项,查询结果/ SQL Server /结果到XX,检查&#34;在查询执行后丢弃结果&#34;
答案 0 :(得分:0)
编辑 - 基于以下评论
您可以使用sp_executesql并将参数传递给它,甚至是OUTPUT参数。
以下是一个示例 - 您需要修改您稍微存储的SQL查询
DECLARE @SQL NVARCHAR(MAX), @Rows INT, @nxt INT = 1
CREATE TABLE DmsRec (row INT, rec NVARCHAR(10))
INSERT INTO DmsRec(row, rec)
VALUES(1, 1)
SET @SQL = 'IF EXISTS ( SELECT rec FROM dbo.DmsRec WHERE row = @nxt) SET @Rows = 1 ELSE SET @Rows = 0' --+'; SELECT @Rows = @@ROWCOUNT'
EXEC sys.sp_executesql @sql, N'@nxt INT, @Rows INT OUTPUT', @nxt, @Rows OUTPUT;
SELECT @Rows
SET @nxt = 0 -- record doesn't exist
SET @SQL = 'IF EXISTS ( SELECT rec FROM dbo.DmsRec WHERE row = @nxt) SET @Rows = 1 ELSE SET @Rows = 0'
EXEC sys.sp_executesql @sql, N'@nxt INT, @Rows INT OUTPUT', @nxt, @Rows OUTPUT;
SELECT @Rows
然后,您可以使用@Rows变量来确定是否需要插入新记录。
If @Rows = 1
BEGIN
--INSERT record
END