msbyuva
msbyuva

Reputation: 3615

Incorrect syntax near the keyword 'SELECT'

I have below SQL function which I am calling from a view

ALTER FUNCTION [dbo].[GetModulesforTesCaseID] 
(@TestCaseID numeric(18))
RETURNS VARCHAR(1000)
AS
BEGIN
declare @Modules VARCHAR(1000)
select @Modules = SUBSTRING(
(SELECT ',' + cast (S.MODULENAME as varchar)
FROM MODULE s JOIN EFFMODFORTESTCASE EMTC ON S.MODULEID = EMTC.MODULEID
JOIN TESTCASE TC ON TC.TESTCASEID =  EMTC.TESTCASEID
where tc.testcaseid = @TestCaseID
ORDER BY s.MODULENAME
FOR XML PATH('')),2,200000)

    if @Modules is null BEGIN
            set @Modules = SELECT M.MODULENAME FROM MODULE M JOIN SUBMODULESFORMODULE SFM ON SFM.MODULEID = M.MODULEID 
            JOIN EFFSUBMODFORTESTCASE ESMTC ON ESMTC.SUBMODULEID = SFM.SUBMODULEID WHERE TESTCASEID = @TestCaseID
    END 

return @Modules
end

I am getting

Msg 156, Level 15, State 1, Procedure GetModulesforTesCaseID, Line 16
Incorrect syntax near the keyword 'SELECT'

please help me in correcting syntax error at the If condition

Upvotes: 0

Views: 2289

Answers (1)

Lamak
Lamak

Reputation: 70638

The error is when you assign the value to the @Modules variable inside your IF. Try this instead (you need to make sure that the result for that SELECT returns only one row):

ALTER FUNCTION [dbo].[GetModulesforTesCaseID] 
(@TestCaseID numeric(18))
RETURNS VARCHAR(1000)
AS
BEGIN
declare @Modules VARCHAR(1000)
select @Modules = SUBSTRING(
(SELECT ',' + cast (S.MODULENAME as varchar)
FROM MODULE s JOIN EFFMODFORTESTCASE EMTC ON S.MODULEID = EMTC.MODULEID
JOIN TESTCASE TC ON TC.TESTCASEID =  EMTC.TESTCASEID
where tc.testcaseid = @TestCaseID
ORDER BY s.MODULENAME
FOR XML PATH('')),2,200000)

    if @Modules is null BEGIN
            SELECT @Modules = M.MODULENAME 
            FROM MODULE M 
            INNER JOIN SUBMODULESFORMODULE SFM 
                ON SFM.MODULEID = M.MODULEID 
            INNER JOIN EFFSUBMODFORTESTCASE ESMTC 
                ON ESMTC.SUBMODULEID = SFM.SUBMODULEID 
            WHERE TESTCASEID = @TestCaseID
    END 

return @Modules
end

Upvotes: 4

Related Questions