【问题标题】:Stored procedure giving error while implementing存储过程在实现时出错
【发布时间】:2016-10-13 10:42:57
【问题描述】:

在执行过程时出现错误:

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

消息 102,级别 15,状态 1,过程 GET_USER_REPORT_DATA,第 23 行
')' 附近的语法不正确。

这是程序

ALTER PROCEDURE [dbo].[GET_USER_REPORT_DATA]
    @From_Date datetime,
    @To_Date datetime
AS
BEGIN
    Select *
    into #GetUserTable
    from
        (select distinct 
             a.N_UserMkey, b.mkey,
             ISNULL(b.first_name + ' ' , '') + ISNULL(b.last_name,'') NAME
         from 
             inward_doc_tracking_trl AS a
         inner join  
             user_mst AS b on a.N_UserMkey = b.mkey
         where 
             a.U_datetime between @From_Date and @To_Date

         select distinct 
             a.mkey, b.ref_mkey
         from 
             inward_doc_tracking_hdr AS a
         inner join 
             inward_doc_tracking_trl AS b on a.mkey = b.ref_mkey 
                                          and a.U_datetime between @From_Date and @To_Date
        ) as xx

    SELECT * FROM #GetUserTable

    DROP TABLE #GetUserTable
END

【问题讨论】:

  • 我认为您可能忘记在内部查询中的两个 select 语句之间放置 union 或 join
  • @navnit:我已经尝试过使用union,但它在询问All queries combined using a UNION, INTERSECT or EXCEPT operator must have an equal number of expressions in their target lists
  • 正是您的第一个查询返回三个字段,而您的第二个查询返回两个字段。如果你想使用联合,它必须在两个查询中都是平等的
  • 那么我应该怎么做才能使它成为一个查询,但将第二个查询中的 mkey 添加到第一个表中。有什么想法吗?
  • 看,如果我运行第一个查询,我将得到 3 列。我只想再添加一列,即inward_doc_tracking_hdr 表中的 mkey

标签: sql sql-server stored-procedures sql-server-2005


【解决方案1】:

试试这个,也看看我的评论

ALTER PROCEDURE [dbo].[GET_USER_REPORT_DATA]
    @From_Date datetime,
    @To_Date datetime
AS
BEGIN

    Select *
    --into #GetUserTable   --Try to never use temp table. Here no need to use temp table
    from
        (
            select distinct a.N_UserMkey, b.mkey,
                ISNULL(b.first_name + ' ' , '') + ISNULL(b.last_name,'') NAME
            from inward_doc_tracking_trl AS a
                inner join user_mst AS b on a.N_UserMkey = b.mkey
            where a.U_datetime between @From_Date and @To_Date
            union
            select distinct a.mkey, b.ref_mkey ,'' NAME   -- In your union tale, if you add runtime column then add value based on your datatype. If you add in first query, then name must give, but if you query is second or third then not compulsory
            from inward_doc_tracking_hdr AS a
                inner join inward_doc_tracking_trl AS b
                        on a.mkey = b.ref_mkey and a.U_datetime between @From_Date and @To_Date
        ) as xx

        --SELECT * FROM #GetUserTable
        --DROP TABLE #GetUserTable
END

【讨论】:

【解决方案2】:

我认为您可能忘记在内部查询中的两个 select 语句之间放置 union

ALTER PROCEDURE [dbo].[GET_USER_REPORT_DATA]
@From_Date DATETIME ,
@To_Date DATETIME
AS
BEGIN
    SELECT  *
    INTO    #GetUserTable
    FROM    ( SELECT DISTINCT
                        a.N_UserMkey ,
                        b.mkey ,
                        ISNULL(b.first_name + ' ', '')
                        + ISNULL(b.last_name, '') NAME
              FROM      inward_doc_tracking_trl a
                        INNER JOIN user_mst b ON a.N_UserMkey = b.mkey
              WHERE     a.U_datetime BETWEEN @From_Date AND @To_Date
              UNION
              SELECT DISTINCT
                        a.mkey ,
                        b.ref_mkey ,
                        ISNULL(c.first_name + ' ', '')
                        + ISNULL(c.last_name, '') NAME
              FROM      inward_doc_tracking_hdr a
                        INNER JOIN inward_doc_tracking_trl b ON a.mkey = b.ref_mkey
                                                          AND a.U_datetime BETWEEN @From_Date AND @To_Date
                        INNER JOIN user_mst c ON c.N_UserMkey = b.mkey
            ) AS xx   


    SELECT  *
    FROM    #GetUserTable
    DROP TABLE #GetUserTable
END

【讨论】:

  • inward_doc_tracking_trl 表中没有名字和姓氏。它在user_mst 表中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-28
相关资源
最近更新 更多