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

Jes*_*lam 26 t-sql sql-server sql-server-2008

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

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

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

SELECT * FROM [dbo].[TableName]
WHERE 0 = 1;
Run Code Online (Sandbox Code Playgroud)

执行计划是一项持续扫描,其中包含与之相关的微不足道的成本.

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

小智 40

如果您需要响应中的列名,那么继续使用该select TOP 0 *表,否则只需使用SELECT TOP 0 NULL.它应该工作得很快:)


Mar*_*ers 25

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

SELECT TOP 0 * FROM [dbo].[TableName]
Run Code Online (Sandbox Code Playgroud)

  • 使用SELECT TOP 0 0使其更短(第二个null将是返回的值,但是当您执行top 0时,它什么也不做,也不需要访问表。 (2认同)

Rem*_*anu 11

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


vik*_*on0 5

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

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

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