【发布时间】:2012-10-27 19:18:31
【问题描述】:
我在 SQL Server 2008 R2 中创建了一个Inline table function,我意识到一些查询会返回任何记录。所以我想当这种情况发生时,返回一个包含所有空列的记录。
举例:
Col1 Col2 Col3
NULL NULL NULL
更新:这里是函数
ALTER FUNCTION [dbo].[GetWorksheetSummaryByObjective](@objectiveId [smallint], @testTemplateId [smallint])
RETURNS @resultTable TABLE (
[AnsweredWorksheetId] [smallint] NOT NULL,
[LastDate] [date] NULL,
[BestScore] [smallint] NULL,
[ShouldBeMakeUp] [tinyint] NOT NULL
)
AS
BEGIN
INSERT @resultTable
SELECT TOP 1 B.Id AS AnsweredWorksheetId, A.Date, CONVERT(smallint, B.Score * 100),
CASE
WHEN B.Score >= 0.7 THEN 0
ELSE 1
END AS ShouldBeMakeUp
FROM AnsweredTest AS A
RIGHT JOIN AnsweredWorksheet AS B ON (A.Id = B.AnsweredTestId)
WHERE B.ObjectiveId = @objectiveId AND A.ExamTemplateId = @testTemplateId
ORDER BY B.Score DESC
RETURN
END
【问题讨论】:
-
您的意思是说“我意识到一些查询不返回任何记录。”? (即不是返回零行,而是要返回包含所有列的单行
NULL?)请发布函数。 -
您必须帮助我们了解您是如何实现查询返回任何记录的,您知道的:)
-
@MartinSmith 对不起我的英语不好,你是对的
-
您发布的功能是多语句 TVF,而不是内联 TVF。内联 TVF 有
RETURNS TABLE,不能有任何过程逻辑,并且通常比多语句更有效,因为它们内联到查询中并且可以在上下文中进行优化。 -
为什么你想要一个全为 NULL 的行而不是没有行?也许您应该使用外部连接...
标签: sql-server sql-server-2008-r2 sql-function