0

ビューから呼び出しているSQL関数の下にあります

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

私は得ています

メッセージ 156、レベル 15、状態 1、プロシージャ GetModulesforTesCaseID、行 16
キーワード「SELECT」付近の構文が正しくありません

If条件の構文エラーを修正するのを手伝ってください

4

1 に答える 1

4

エラーは、@Modules内の変数に値を割り当てるときに発生しますIFSELECT代わりにこれを試してください (その結果が1 行のみを返すことを確認する必要があります)。

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
于 2013-01-17T20:53:17.280 に答える