2012-03-16 126 views
1

此语法有什么问题?我该如何解决它?CASE语句在T-SQL函数中不适用于“NOT LIKE”条件

以下是错误:

Msg 156, Level 15, State 1, Procedure fnTestResultStringNEW, Line 16 
Incorrect syntax near the keyword 'LIKE'. 
Msg 102, Level 15, State 1, Procedure fnTestResultStringNEW, Line 40 
Incorrect syntax near 'END'. 

这里是T-SQL代码:

ALTER FUNCTION [dbo].[fnTestResultStringNEW] 
(
    @testId INT 
) 
RETURNS NVARCHAR(512) 
AS 
BEGIN 
    DECLARE @totalString NVARCHAR(512) 
    SET @totalString = '' 
    SELECT @totalString = 
     COALESCE(  
      CASE substance.sortorder NOT LIKE '%.0' THEN 
       CASE WHEN @totalString = '' THEN 
        testresult.result 
       ELSE 
        @totalString + ', ' + testresult.result    
       END 
      ELSE 
       CASE WHEN @totalString = '' THEN 
        testresult.result 
       ELSE 
        @totalString    
       END 
      END  
     , '') 
    FROM [dbo].[testresult_audit] AS testresult 
    JOIN [dbo].[test_testresult] 
     ON testresult.testresultid = test_testresult.testresultid 
      AND testresult.versionnumber = test_testresult.testresultversionnumber 
    LEFT OUTER JOIN substance ON substance.substanceid = testresult.substanceid 
    WHERE 
    test_testresult.testid = @testid 
    ORDER BY substance.sortorder, testresult.result 

    RETURN @totalString 
END 

这工作:

回答

7

你缺少WHEN

CASE substance.sortorder NOT LIKE '%.0' THEN 

更改为:

CASE WHEN substance.sortorder NOT LIKE '%.0' THEN 
+0

哦哥哥笑..感谢 – MacGyver 2012-03-16 16:31:01

+2

容易。有时它只是一个新的眼睛。 :) – markblandford 2012-03-16 16:32:19