Объединение SQL между NULL и ошибкой VARCHAR

У меня есть два представления с одинаковыми столбцами. Один из столбцов в первом представлении генерируется «на лету» и устанавливается как NULL, а тот же столбец в другом представлении имеет значения, сохраненные как varchar. У меня есть сохраненный процесс, который выглядит так:

ALTER PROCEDURE [dbo].[mi_GetLearners]  
(@centrename nvarchar(200))  
AS  

SELECT [centrename]  
     ,[Name]  
     ,[Username] --generated on the fly as NULL
FROM  [DB1].[dbo].[vw_Learners]  
WHERE [centrename] = @centrename  

UNION  

SELECT [centrename]  
     ,[Name]   
     ,[Username] --values stored as varchar   
FROM  [Linked_Server].[DB2].[dbo].[vw_Learners]  
WHERE [centrename] = @centrename 

DB1 находится на SQL Server 2008 R2
DB2 находится на сервере SQL 2005

Когда я запускаю хранимую процедуру, я получаю следующую ошибку:

Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'someusername' to data type int.

Почему он пытается преобразовать значение в тип данных int, поскольку другой столбец установлен как NULL? Если вместо этого я изменю второй столбец с NULLна ' ', хранимый процесс будет работать нормально... Я действительно озадачен тем, почему объединение между столбцом varcharи столбцом NULL, сгенерированным в операторе выбора, будет выкинуть такую ​​ошибку... есть идеи?

РЕДАКТИРОВАТЬ :Я ищу объяснение, а не решение...

РЕДАКТИРОВАТЬ 2 :Запуск следующего кода:

CREATE VIEW vw_myview
AS
SELECT NULL AS MyColumn

EXECUTE sp_help vw_myview

Возвращает:

    Type    Column_name
     int       MyColumn
5
задан Cookie Monster 11 July 2012 в 13:24
поделиться