Reputation: 3615
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
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