【问题标题】:Incorrect syntax near the keyword 'SELECT'关键字“SELECT”附近的语法不正确
【发布时间】:2013-01-17 20:50:37
【问题描述】:

我有以下从视图调用的 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 条件下的语法错误

【问题讨论】:

  • 将每个部分拆分出来单独运行。

标签: sql sql-server-2008


【解决方案1】:

错误是当您将值分配给IF 中的@Modules 变量时。试试这个(你需要确保SELECT 的结果只返回一行):

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-12-16
    • 1970-01-01
    • 2016-08-23
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 2018-08-02
    相关资源
    最近更新 更多