我有两个具有相同列的视图。第一个视图上的一列是“即时”生成的,并设置为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 Server 2005 上
当我运行存储过程时,出现以下错误:
消息 245,级别 16,状态 1,行 1 将 varchar 值“someusername”转换为数据类型 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