UNION и буквальное значение, странный результат - PullRequest
0 голосов
/ 16 мая 2018

Сегодня я столкнулся с чем-то странным (или я устал видеть что-то очевидное)

Отказ от ответственности: Не нужно продолжать читать ... Да, я устал, и это чепуха ...

SQL-сервер: 11.0.6251.0

Я ответил на этот вопрос и увидел, что все строки получили букву "Е" в первую очередь.

Это то же самое вкратце

DECLARE @tblA TABLE(Id INT,SomeValue VARCHAR(100));
INSERT INTO @tblA VALUES (1,'blah');

DECLARE @tblB TABLE(Id INT,SomeValue VARCHAR(100));
INSERT INTO @tblA VALUES (2,'blub');

SELECT 'A' AS SourceFlag, Id, SomeValue
FROM @tblA
UNION ALL
SELECT 'B', Id, SomeValue
FROM @tblB

Это я вернусь

SourceFlag  Id  SomeValue
A           1   blah
A           2   blub

Почему второй ряд не получил "B"?

План выполнения:

enter image description here

Один Вычислить скаляр показывает [Expr1004] = Скаларооператор ('A') другой показывает [Expr1009] = Скаларооператор ('B') .

Конкатенация определяет результат как Union1010; Union1011; Union1012 , а Union1010 определено в [Union1010] = (Expr1004; Expr1009); [Union1011] = (Id; Id); [Union1012] = (SomeValue; SomeValue) .

1 Ответ

0 голосов
/ 16 мая 2018

Данные не были вставлены в @tblB. ID 2 был вставлен в @tblA.

DECLARE @tblB TABLE(Id INT,SomeValue VARCHAR(100));
INSERT INTO @tblA VALUES (2,'blub');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...