选择语句阻止另一个选择语句

时间:2018-08-09 20:59:19

标签: sql sql-server

我不太确定这里发生了什么。如果有@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的警报,如果我注释掉另一个,它将执行另一个警报。但是,如果我同时离开他们两个,则只会显示其中一个。我在这里做什么错了?

2 个答案:

答案 0 :(得分:1)

作为注释中的用户,您每次给@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;

答案 1 :(得分:0)

我假设代码是“ alerting”消息,是您显示的该消息被剪掉之后。

然后,由于将相同的变量@message用作两个分配的目标,因此在执行第二个分配时,将覆盖第一次分配的内容。只有第二个分配中的值才可以执行“ alerting”命令。

使用两个不同的变量或在每次分配后“提醒”您的消息。