【问题标题】:how I can hide displaying result of exec command如何隐藏 exec 命令的显示结果
【发布时间】:2019-09-17 21:45:29
【问题描述】:
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

我的问题是如何隐藏执行命令的显示结果。 (使用 Sql Server 2008r2) 以上查询是完整程序的一小部分。

访问多个条件、值和多个数据库我生成一个选择语句并存储在 Rec Field 到表 DmsRec

生成 require Select.... 语句后,我将其存储到表 DmsRec 中。 例如SELECT ACCD FROM M_TABLE WHERE 1=1 and ACCD='0034422'

这个选择语句作为值存储在表 DmsRec 中 想在不同的数据库中执行。

所以我使用use 命令并更改数据库名称,访问记录集。 如果执行的 sql (return 0 row) 则运行 insert 命令,该命令在不同的数据库中执行。 有了这个我才知道插入 docidDMSResults 是那些 master 不是 avalialbel 的事务。

完美运行,但不能隐藏执行命令的显示记录。

我运行exec(@sql) 只是为了检查它是否返回任何行。 并将行计数值存储到变量中。

但不想在网格中显示记录(同时结果 {effected rows} 应该存储在变量中)。

无需手动更改 SSMS 中的选项,即 Tools/Options,Query Results/SQL Server/Results to XX,勾选“Discard results after query executions”

【问题讨论】:

  • 关闭无计数
  • 不,先生,我已经给出了....但是 exec(@sql) 在 Result Pan Grid 中显示记录。我只想显示消息,例如(1 行受影响)但没有结果。

标签: sql sql-server tsql


【解决方案1】:

编辑 - 基于下面的 cmets

您可以使用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

【讨论】:

  • 请。在主帖中阅读。字段 *Rec 的值类似于 'INDIA'、'UK'、'US' 存储了 sql 查询文本(见帖子)。而且每一行都是不同的sql(也可能是不同的列)。因此我不能简单地使用 Declare @rows table (rec INT) 它给出一个错误'Column name ....does not match'
  • 在每次执行之后,您要检查的只是该行是否不存在,如果存在则插入一条新记录,是吗?
  • YES!,还要注意检查是在不同的数据库中,并且在表 DmsResult 中插入值是在不同的数据库中。
猜你喜欢
  • 2023-03-16
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多