首页 > 解决方案 > 选择语句阻塞另一个选择语句

问题描述

我不太确定这里发生了什么。我有一个警报,如果@StoreOrderID >1.

它是这样的:

declare @message varchar(1000)
@StoreID --(retrieves info from StoreOrders tables)

BEGIN
    select @message =  'store' + storename 
                                from StoreOrders as so
                                join Distributors as ds
                                on ds.DistributorID = so.StoreOrderID
                                where ds.SDistributorID = @StoreID


    select @message =   brandID
                                from StoreOrders a 
                                join Brandtitles as b
                                on b.branddistributorID = a.StoreOrderID
                                where b.brandNum = @DistributorNum and b.branddistributorID = @StoreID

select @message = 'date' + ISNULL(convert(varchar, @Date),'') 
select @message = 'cost' + ISNULL(Convert(varchar,@Cost),'')

同样由于某种原因,如果我尝试将字符串连接到“品牌”选择它会引发错误。我可以为“店名”做这件事。我认为这可能与它有关。

如果我注释掉商店名称select,它将发送警报brandID,如果我注释掉另一个,它会发送另一个。但是,如果我同时离开它们,它只会显示其中一个。我在这里做错了什么?

标签: sqlsql-server

解决方案


正如评论中提到的用户, @message每次为它分配一个新值时,您都会覆盖该变量,而不是连接任何值。一个更简单和更清洁的方法是......

declare @message varchar(1000)
        @StoreID [DataType]--(retrieves info from StoreOrders tables)


BEGIN

Declare  @storename  VARCHAR(100)
       , @brandID    VARCHAR(100)
       , @Date       VARCHAR(100)
       , @Cost       VARCHAR(100);

    select @storename =  'store' + ISNULL(storename , 'Unknown') 
    from StoreOrders as so
    join Distributors as ds
    on ds.DistributorID = so.StoreOrderID
    where ds.SDistributorID = @StoreID;


    select @brandID =   ISNULL(CAST( brandID AS VARCHAR(100) , 'Unknown')
    from StoreOrders a 
    join Brandtitles as b
    on b.branddistributorID = a.StoreOrderID
    where b.brandNum = @DistributorNum 
      and b.branddistributorID = @StoreID;

select @Date = 'date' + ISNULL(convert(varchar, @Date),'');
select @Cost = 'cost' + ISNULL(Convert(varchar,@Cost),'');

SET @message = @storename + @brandID + @Date + @Cost;

推荐阅读