我怎么能隐藏显示exec命令的结果

时间:2017-11-15 11:40:34

标签: sql sql-server tsql

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;

1 个答案:

答案 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

enter image description here

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

enter image description here

然后,您可以使用@Rows变量来确定是否需要插入新记录。

If @Rows = 1
BEGIN
   --INSERT record
END