如何执行SQL查询而不显示结果

51

有没有可能执行SQL查询但不显示结果?

类似于

Select * from Table_Name

运行此查询后,结果不应在 SQL Server 中显示。


2
如果这是面试问题,那么它似乎非常奇怪且没有经过深思熟虑。您可以在SQL Server Management Studio中“解析”(执行按钮旁边的勾号图标)SQL查询。它不会运行查询,但确实检查SQL是否有效。也许这就是他们想要表达的意思。 - Colin Mackay
9
关闭屏幕 ;) - Guido
5
有合理的(非面试)原因想要这样做。我已经尝试过两次找到一种方法来实现这个目标,两次都是出于几乎相同的原因,并且都是为了与劣质第三方软件协作而进行的黑客操作。简单来说:假设你正在使用某个软件,该软件接受用户输入的SQL(具有自定义查询的报告软件)。现在想象一下,你想为用户在顶部设置一些变量,以便提高可读性和简易性。现在想象一下,这个愚蠢的软件会让你这样做,但是需要检查SQL的第一个单词是否为SELECT。现在请开枪打死我吧,我不能再这样继续下去了。 - DaveRandom
2
我有一个使用案例。来这里寻找解决方案。我想找到所有包含“ItemID”字段的表...并且进一步,我想找到所有表格,其中至少有一条记录包含某些特定值的“ItemID”。并非所有表都有这个。如果只有在记录中“ItemID”等于此值时,我才想打印出表的名称。我不想要任何仅会混淆输出的结果。 - Luke
1
我还有另一个情况需要这样做: 我正在对数据库中的100多个表运行查询,以查找自然键中的重复项。 然后保存@@rowcount值。 然后我不关心结果,只关心返回的行数。 - Tech
显示剩余9条评论
12个回答

0

我很惊讶社区无法轻松找到这个的用例。大型结果集会占用客户端内存,如果有许多SSMS窗口处于活动状态可能会成为问题(我通常会打开2-3个SSMS实例,每个实例都有50-70个活动窗口)。在某些情况下,例如Cyril的示例中,SSMS可能会耗尽内存,无法处理大型结果集。例如,我曾经需要调试返回数亿行的存储过程。在我的开发机上,如果不丢弃结果,则无法在SSMS中运行。该过程是用作数据源加载数据仓库表的SSIS包的一部分。在SSMS中进行调试涉及进行非功能性更改(因此结果集对我没有兴趣),并检查执行统计信息和实际查询执行计划。


2
你不确定这是一条评论还是对问题的回答? - roelofs
2
我的使用情况是计时一个返回大量行的功能,但我不想包括SSMS显示结果所需的时间。 - Elaskanator

-2
我需要一个存储过程来返回在特定时间点之后由指定用户更新的所有记录,仅显示存在记录的结果。以下是代码:
-- Written by David Zanke
-- Return all records modified by a specified user on or after a specified date. 


If mod date does not exist, return row anyhow

Set Nocount on 

Declare @UserName varchar(128) = 'zanked'
    , @UpdatedAfterDate Varchar( 30)  = '2016-10-08'
    , @TableName varchar( 128)
    , @ModUser varchar( 128)
    , @ModTime varchar( 128)
    , @sql varchar( 2000 )


-- In a perfect world, left join would be unecessary since every row that captures the last mod user would have last mod date.

-- Unfortunately, I do not work in a perfect world and rows w/ last mod user exist w/o last mod date

Declare UserRows Cursor for Select distinct c1.table_name, c1.column_name, c2.column_name  From INFORMATION_SCHEMA.COLUMNS c1

Left Join INFORMATION_SCHEMA.COLUMNS c2 On c1.Table_Name = c2.Table_Name And c2.Column_name like '%DTTM_RCD_LAST_UPD%'
        Where c1.column_name like '%UPDATED_BY_USER%'


Open UserRows

Fetch UserRows Into  @tablename, @ModUser, @ModTime

While ( @@FETCH_STATUS = 0 )
Begin
    -- capture output from query into a temp table

    Select @sql = 'Select ''' + @TableName + ''' TableName, * Into ##HoldResults From ' + @TableName + ' Where ' + @ModUser + ' = ''' + @userName + ''''
            + Case When @ModTime Is Null Then '' Else   ' And ' + @ModTime + ' >= ''' + @UpdatedAfterDate + '''' End

    Exec ( @sql)

    -- only output where rows exist
    If @@ROWCOUNT > 0
    Begin
        Select * from ##HoldResults
    End
    Drop Table ##HoldResults

    Fetch UserRows Into  @tablename, @ModUser, @ModTime

End
Close UserRows;
Deallocate UserRows

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接