我不太确定这里发生了什么。如果有@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
的警报,如果我注释掉另一个,它将执行另一个警报。但是,如果我同时离开他们两个,则只会显示其中一个。我在这里做什么错了?
答案 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”命令。
使用两个不同的变量或在每次分配后“提醒”您的消息。