Я не совсем понимаю, что здесь происходит. У меня предупреждение, которое гаснет, если @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, если я закомментирую другое, оно сделает другое. Однако, если я оставлю их обоих, будет отображаться только один из них. Что я здесь делаю не так?
Но у меня под ним есть еще три оператора select, которые отправляются как предупреждение.
Ну, вы их не показываете, поэтому я их не вижу. Я могу только сказать вам, что с обоими из этих SELECT в этом порядке вы переписываете значение 'message' из первого со вторым, поэтому, если вы сделаете что-то потом, вы увидите только второй. У вас действительно недостаточно информации в этом вопросе для дальнейшей диагностики. Но очевидно, что нельзя ожидать, что «сообщение» будет иметь ОБЕ значения одновременно. Переменные работают не так.
Что вы имеете в виду под "получать как предупреждение"? У вас есть переменная. Затем вы присваиваете ему значение. А затем сразу присвойте ему новое значение. Почему вас смущает, что у него ВСЕГДА будет второе значение?


Я предполагаю, что код "предупреждает" сообщение после того, что вы показали.
Затем, когда вы используете одну и ту же переменную @message в качестве цели для обоих назначений, вы перезаписываете содержимое, которое вы назначили в первый раз при выполнении второго назначения. Только значения из второго назначения попадают в команду «оповещение».
Используйте две разные переменные или «предупреждайте» свое сообщение после каждого назначения.
Как пользователь, упомянутый в комментариях, вы перезаписываете переменную @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;
Второй SELECT перезаписывает первый SELECT (@message), поэтому первый SELECT работает, но затем значение отбрасывается, когда второе перезаписывает его.