【发布时间】:2011-11-01 16:21:30
【问题描述】:
我有一个很长的存储过程,当我执行该过程时出现以下错误:
Msg 206, Level 16, State 2, Line 1
Operand type clash: varchar(max) is incompatible with sql_variant
所以为了排除故障,我已经打印出了问题所在和代码是:
SELECT 'Name' ,
7 ,
CASE WHEN 'varchar' = 'varbinary'
THEN REPLACE(UPPER(sys.fn_sqlvarbasetostr([Name])), 'X', 'x')
ELSE CONVERT(VARCHAR(4000), [Name])
END , 'varchar'
FROM ref.dbo.datatables
WHERE id = 12
ORDER BY [ID]
所以当我执行上面的语句时,它给我的错误是:
Msg 206, Level 16, State 2, Line 1
Operand type clash: varchar(max) is incompatible with sql_variant
ref.dbo.datatables表中Name的数据类型为Varchar(MAX)
如何解决这个问题?
答案:
这就是我所做的工作:
SELECT 'Name',
7,
CASE WHEN 'varchar' = 'varbinary'
THEN REPLACE(UPPER(sys.fn_sqlvarbasetostr(CONVERT(VARBINARY,[Name]))),'X','x')
ELSE CONVERT(VARCHAR(4000),[Name])
END,
'varchar'
FROM ref.dbo.datatables
WHERE id = 12
ORDER BY [ID]
【问题讨论】:
-
CASE WHEN 'varchar' = 'varbinary'这永远不会是真的。不确定您要使用 CASE 完成什么。 [Name] 列的数据类型是什么? -
@JoeStefanelli 正如我所说,这是由动态 sql 组成的长存储过程的一部分,因此我打印了该语句以进行故障排除。 Varchar(Max) 是 [Name] 列的数据类型
标签: sql-server sql-server-2008 tsql varbinary