У меня есть два представления с одинаковыми столбцами. Один из столбцов в первом представлении генерируется «на лету» и устанавливается как 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