有没有可能执行SQL查询但不显示结果?
类似于
Select * from Table_Name
运行此查询后,结果不应在 SQL Server 中显示。
有没有可能执行SQL查询但不显示结果?
类似于
Select * from Table_Name
运行此查询后,结果不应在 SQL Server 中显示。
我很惊讶没有人提出答案:打开“执行后丢弃查询结果”选项;我非常确定这就是面试官想要的。 SET FMT ONLY
在我看来完全是另一回事。
在 SSMS 中:
你可能想这样做的原因是避免等待和浪费资源将结果加载到网格中,但仍然能够获取例如实际执行计划等信息。
执行将会返回一个记录集。当然它可能没有行,但会得到结果。
您可以使用SET FMTONLY来抑制行,但不能抑制结果集。
SET FMTONLY ON
SELECT * FROM sys.tables
SET FMTONLY OFF
SELECT * FROM sys.tables
个人从未用过它......
编辑2018年。如注所述,现在可以参考@ deroby的答案以获得更好的解决方案。
SET FMTONLY
(谢谢,现在我不必从旧脚本文件中挖掘了)。一些程序和实用程序在查询SQL时会这样做;首先他们提交一个带有FMTONLY ON的查询,以确定结果表结构的布局,然后当他们准备好后再运行它,带有FMTONLY OFF,以获取实际数据。(我发现这一点时,该过程调用了第二个过程,第二个过程返回了数据集,但由于某些模糊原因,整个过程都倒塌了。)
这也可以在SSMS中完成。对于所有查询窗口,在“工具/选项”,查询结果/SQL Server/结果到XX下,勾选“查询执行后丢弃结果”;对于当前窗口,在“查询/查询选项”,结果/XX下,同样的复选框。这里的优势在于查询将在数据库服务器上运行,但数据结果将不会返回。如果您正在检查查询计划但不想收到超过10GB的结果数据(通过网络传输到您的笔记本电脑),或者如果您正在进行一些严重的循环测试,这可能非常有价值,因为SSMS只能接受来自给定“运行”的有限数量的结果集,然后用“太多的结果集”消息停止查询。[嗯,关于那个“仅查询计划”的问题要再检查一下——我觉得它确实会这样做,但已经很久了。]insert anothertable
Select * from Table_Name
执行select语句但不返回任何结果
set noexec on
Select * from Table_Name
IF EXISTS (SELECT 1 FROM MyTable WHERE 1 = 2) BEGIN DoNothingHere: END;
- it3xlWHERE EXISTS()
可能会在第一个符合条件的记录后停止。 但是,当以这种方式工作时,可能会遇到1000个“以下”的记录出现(例如)除以零错误,这将保持不被注意。 - derobydeclare csr cursor local for select name from sys.views order by name
declare @viewname sysname
declare @sql nvarchar(max)
open csr
fetch next from csr into @viewname
while @@fetch_status = 0 begin
--set @sql = 'select top 1 * from ' + @viewname
set @sql = 'declare @test nvarchar(max) select @test = checksum(*) from ' + @viewname
print @viewname
exec sp_executesql @sql
fetch next from csr into @viewname
end
close csr
deallocate csr
目的是要抑制所有行吗?那么请使用一个对每一行都评估为false的过滤器:
SELECT * FROM Table_Name WHERE 1 = 2
A PERFORM statement sets FOUND true if it produces (and discards) one or more rows, false if no row is produced.
这段内容与编程有关。它讲述了PERFORM语句的作用,该语句可以设置FOUND变量并返回一个结果集。如果没有返回任何行,则FOUND变量将被设置为false。