【问题标题】:Trying to Add two sql statements and getting error with SELECT Statements尝试添加两个 sql 语句并使用 SELECT 语句出错
【发布时间】:2014-07-23 09:48:30
【问题描述】:

我是 SQL Server 的新手,有两个选择语句 - 我正在尝试将 UNION 组合起来。 但我收到错误消息 = 为变量赋值的 SELECT 语句不得与数据检索操作结合使用

我如何分配@NEWComments 变量??

    DECLARE @NEWComments VARCHAR(max)         
    SELECT @NEWComments

    select cast(Comments1 as varchar(max)),cast( Comments2 as varchar(max)),   
    cast(Comments3 as varchar(max)), 
    from TableComments 
    where CommentsID = 1234
    UNION 

    SELECT TOP 2 @NEWComments = COALESCE(@NEWComments,'') + 
    cast(comments as varchar(max)) + ';'  
    FROM [ChildTableComments]
    where CommentsID = 1234

请帮忙!!

我正在尝试从两个表 TableComments 和 ChildTableComments 中检索记录。 TableComments 最多有 1 条记录,但 ChildTableComments 将有许多相同 CommentsID 的记录。

所以我尝试从 ChildTableComments 中获取 Top2 记录并添加它们并返回 1 个可以使用 UNION 与 TableComments 添加的单列。

【问题讨论】:

    标签: sql sql-server sql-server-2005 select


    【解决方案1】:

    如果要将所有子 cmets 合并为一行,可以这样:

    DECLARE @NEWComments VARCHAR(max);         
    SET @NEWComments = '';
    
    SELECT TOP 2 @NEWComments = @NEWComments + COALESCE(comments,'')
    FROM [ChildTableComments]
    where CommentsID = 1234;
    
    select cast(Comments1 as varchar(max)) AS com1,
        cast( Comments2 as varchar(max)) as com2,
        cast(Comments3 as varchar(max)) as com3
    from TableComments 
    where CommentsID = 1234
    UNION
    
    SELECT @NEWComments AS com1,
        null as com2,
        null as com3;
    

    【讨论】:

    • 现在可以试试吗?如果您仍然收到错误 - 在哪一行?
    • SELECT TOP 2 @NEWComments += COALESCE(cmets,'') 在这一行我收到错误
    • 我已编辑解决方案,请重试。我坐在 SQL2012 所以我没有办法自己测试它。
    【解决方案2】:

    你也可以试试这个

        DECLARE @NEWComments VARCHAR(max);         
    
        SELECT TOP 2 @NEWComments = @NEWComments + COALESCE(comments,'')
        FROM [ChildTableComments] where CommentsID = 1234;
    
        select @NEWComments AS Comments, cast(Comments1 as varchar(max)) AS com1,
        cast( Comments2 as varchar(max)) as com2,
        cast(Comments3 as varchar(max)) as com3
        from TableComments  where CommentsID = 1234
    

    【讨论】:

      【解决方案3】:

      我不确定您要做什么。但是UNION 必须具有相同的列数。我没有得到你想要完成的任务。但这里有一个可能有效的建议。我不确定Comments2Comments3 应该在UNION 声明中是什么:

      DECLARE @NEWComments VARCHAR(max)         
      SELECT @NEWComments
      
      select 
          cast(Comments1 as varchar(max)) Comments1,
          cast(Comments2 as varchar(max)) Comments2,   
          cast(Comments3 as varchar(max)) Comments3, 
      from 
          TableComments 
      where 
          CommentsID = 1234
      UNION 
      
      SELECT TOP 2 
          COALESCE(@NEWComments,'') + cast(comments as varchar(max)) + ';'  AS Comments1,
          '???' AS Comments2,
          '???' AS Comments3
      FROM [ChildTableComments]
      where CommentsID = 1234
      

      【讨论】:

      • 请看看我的 cmets 并提出建议。
      猜你喜欢
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多