【问题标题】:Msg 156, Level 15, State 1, Procedure ShowDirectorateList, Line 739 Incorrect syntax near the keyword 'END'消息 156,级别 15,状态 1,过程 ShowDirectorateList,第 739 行关键字“END”附近的语法不正确
【发布时间】:2015-12-02 09:58:59
【问题描述】:

我做了一个程序,我收到了很多错误消息,比如

消息 156,级别 15,状态 1,过程 ShowDirectorateList,第 739 行 关键字“END”附近的语法不正确。

有我的代码请帮我修复它:

    --List ALL
    IF (@iType = 1 AND @iStatus=2)
    BEGIN
        WITH Allboth AS
        (
        SELECT ROW_NUMBER() OVER (ORDER BY [sName],[iDirectorateID]) AS RowNum
            ,[iDirectorateID]
            ,[sName] 
            ,[sAddress1] 
            ,[iPostCode] 
            ,[sLeadContact] 
            ,[iStatus] 
        FROM [dbo].[Directorate] Dir
            ,[dbo].[Contact] Con
            ,[dbo].[Address] Ad
            ,[dbo].[Detail] Det
        WHERE Dir.iContactID = Con.iContactID
        AND Con.iDetailID = Det.iDetailID
        AND Con.iAddressID = Ad.iAddressID
        ) 
        Insert Into @_FisrtTable
    END

我想从数据库中选择数据并放入@_FirstTable

    DECLARE @_FisrtTable Table
(
     [RowNum] int NULL
    ,[iDirectorateID] int NULL
    ,[sName] nvarchar(50) NULL
    ,[sAddress1] nvarchar(50) NULL
    ,[iPostCode] int NULL
    ,[sLeadContact] nvarchar(50) NULL
    ,[iStatus] int NULL
)

【问题讨论】:

  • 您的 INSERT 声明似乎不完整。查看一些示例here,查找B. Using WITH common table expression to define the data inserted 部分。

标签: sql sql-server


【解决方案1】:
DECLARE @_FisrtTable TABLE (
    [RowNum] INT NULL,
    [iDirectorateID] INT NULL,
    [sName] NVARCHAR(50) NULL,
    [sAddress1] NVARCHAR(50) NULL,
    [iPostCode] INT NULL,
    [sLeadContact] NVARCHAR(50) NULL,
    [iStatus] INT NULL
)

IF (@iType = 1 AND @iStatus = 2) BEGIN

    ;WITH Allboth AS ( -- missing ";"
        SELECT
            ROW_NUMBER() OVER (ORDER BY [sName], [iDirectorateID]) AS RowNum,
            [iDirectorateID],
            [sName],
            [sAddress1],
            [iPostCode],
            [sLeadContact],
            [iStatus]
        FROM [dbo].[Directorate] Dir,
             [dbo].[Contact] Con,
             [dbo].[Address] Ad,
             [dbo].[Detail] Det
        WHERE Dir.iContactID = Con.iContactID
            AND Con.iDetailID = Det.iDetailID
            AND Con.iAddressID = Ad.iAddressID
    )
    INSERT INTO @_FisrtTable
    SELECT * FROM Allboth -- missing "SELECT" from CTE

END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多