Сегодня я столкнулся с чем-то странным (или я устал видеть что-то очевидное)
Отказ от ответственности: Не нужно продолжать читать ... Да, я устал, и это чепуха ...
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"?
План выполнения:
Один Вычислить скаляр показывает [Expr1004] = Скаларооператор ('A') другой показывает [Expr1009] = Скаларооператор ('B') .
Конкатенация определяет результат как Union1010; Union1011; Union1012 , а Union1010 определено в [Union1010] = (Expr1004; Expr1009); [Union1011] = (Id; Id); [Union1012] = (SomeValue; SomeValue) .