我有兴趣在某些事件中从SQL Server存储过程返回一个空结果集。
预期的行为是L2SQL DataContext.SPName().SingleOrDefault()
将导致CLR空值。
我目前正在使用以下解决方案,但我不确定它是否会被视为不良做法,性能危害(我通过阅读执行计划无法找到),或者有一个更好的方法:
SELECT * FROM [dbo].[TableName]
WHERE 0 = 1;
执行计划是一项持续扫描,与之相关的成本很低。
我问这个而不是简单地不运行任何SELECT的原因是因为我担心以前的SELECT @scalar或SELECT INTO语句可能导致意外的结果集被送回L2SQL。我什么都不担心?
答案 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),选择一个非常小而且没有大量使用的表 - 我是确保您的数据库架构有一个。