Оператор выбора, блокирующий другой оператор выбора

Я не совсем понимаю, что здесь происходит. У меня предупреждение, которое гаснет, если @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), поэтому первый SELECT работает, но затем значение отбрасывается, когда второе перезаписывает его.

pmbAustin 09.08.2018 23:04

Но у меня под ним есть еще три оператора select, которые отправляются как предупреждение.

quicklaunch2009 09.08.2018 23:09

Ну, вы их не показываете, поэтому я их не вижу. Я могу только сказать вам, что с обоими из этих SELECT в этом порядке вы переписываете значение 'message' из первого со вторым, поэтому, если вы сделаете что-то потом, вы увидите только второй. У вас действительно недостаточно информации в этом вопросе для дальнейшей диагностики. Но очевидно, что нельзя ожидать, что «сообщение» будет иметь ОБЕ значения одновременно. Переменные работают не так.

pmbAustin 09.08.2018 23:17

Что вы имеете в виду под "получать как предупреждение"? У вас есть переменная. Затем вы присваиваете ему значение. А затем сразу присвойте ему новое значение. Почему вас смущает, что у него ВСЕГДА будет второе значение?

Sean Lange 09.08.2018 23:18
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
4
45
2

Ответы 2

Я предполагаю, что код "предупреждает" сообщение после того, что вы показали.

Затем, когда вы используете одну и ту же переменную @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;

Другие вопросы по теме

Как выбрать и объединить группу таблиц в схеме в SQL Server 2008 R2 с помощью переменной для определения базы данных
Почему select count (*) дает другой результат, чем select?
Как я могу получить TZoffset в T-SQL?
Нечеткое группирование SSIS Всегда возвращать один и тот же результат с разным порогом схожести
SQL: реплицированные транзакции ждут следующего резервного копирования журнала или пока партнер по зеркалированию не наверстает упущенное
Проблема с идентификатором, состоящим из нескольких частей, и перемещение данных двумя способами в одной таблице / представлении
Нужна полезная рука с sql-запросом
Доступ к конкретной записи базы данных в соответствии с выбранным представлением сетки данных после фильтра
TSQL-Суммирует все значения столбца 1 на одно значение столбца 2 и отображает ТОЛЬКО одно значение столбца 2 и суммарное значение столбца 1
SQL Server 2017 - наиболее часто приобретаемые или встречающиеся категории и подкатегории