【发布时间】:2012-07-11 21:24:07
【问题描述】:
我有两个具有相同列的视图。第一个视图上的一个列是“即时”生成的,并设置为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 上
当我运行存储过程时,我收到以下错误:
Msg 245, Level 16, State 1, Line 1 转换时转换失败 将 varchar 值 'someusername' 转换为数据类型 int。
为什么在另一列设置为NULL 时尝试将值转换为int 数据类型?如果我改为将第二列从NULL 更改为' ',则存储的过程可以正常工作......我真的很困惑为什么选择语句中生成的varchar 列和NULL 列之间的联合会抛出这样的错误......有什么想法吗?
编辑:我正在寻找解释而不是解决方案......
编辑 2:运行以下代码:
CREATE VIEW vw_myview
AS
SELECT NULL AS MyColumn
EXECUTE sp_help vw_myview
返回:
Type Column_name
int MyColumn
【问题讨论】:
-
发布您的表定义,列数据类型必须匹配才能使联合工作。
标签: sql sql-server-2008 tsql sql-server-2005 null