如何从使用T-SQL的过程返回空结果集?

时间:2010-05-09 00:56:22

标签: sql-server tsql sql-server-2008

我有兴趣在某些事件中从SQL Server存储过程返回一个空结果集。

预期的行为是L2SQL DataContext.SPName().SingleOrDefault()将导致CLR空值。

我目前正在使用以下解决方案,但我不确定它是否会被视为不良做法,性能危害(我通过阅读执行计划无法找到),或者有一个更好的方法:

SELECT * FROM [dbo].[TableName]
WHERE 0 = 1;

执行计划是一项持续扫描,与之相关的成本很低。

我问这个而不是简单地不运行任何SELECT的原因是因为我担心以前的SELECT @scalar或SELECT INTO语句可能导致意外的结果集被送回L2SQL。我什么都不担心?

5 个答案:

答案 0 :(得分:36)

如果您需要回复中的列名,请继续使用该表中的select TOP 0,否则只需使用SELECT TOP 0 NULL。它应该工作得非常快:)

答案 1 :(得分:25)

这是一种合理的方法。另一种选择是:

SELECT TOP 0 * FROM [dbo].[TableName]

答案 2 :(得分:11)

如果您只想检索没有任何实际行的结果集的元数据,请使用SET FMTONLY ON

答案 3 :(得分:3)

我认为最好的解决方案是前0但不使用虚拟表。 这对我来说是

选择top 0 null作为column1,null作为column2。

使用例如系统表可能对性能很好,但看起来不干净。

答案 4 :(得分:2)

这是一种完全合理的方法。

为了减轻对性能的担忧(首先你不应该有任何担心 - 服务器足够智能以避免表扫描1 = 0),选择一个非常小而且没有大量使用的表 - 我是确保您的数据库架构有一个。