sql-server – 操作数类型冲突
我有一个很长的存储过程,当我执行该过程我得到以下错误:
Msg 206,Level 16,State 2,Line 1 Operand type clash: varchar(max) is incompatible with sql_variant 所以麻烦拍摄我已经打印了问题所在的satetement,代码是: 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,Line 1 Operand type clash: varchar(max) is incompatible with sql_variant 名称的数据类型是ref.dbo.datatables表中的Varchar(MAX) 如何解决这个问题? 回答: 这是我做的工作: SELECT 'Name',CASE WHEN 'varchar' = 'varbinary' THEN REPLACE(UPPER(sys.fn_sqlvarbasetostr(CONVERT(VARBINARY,[Name]))),'x') ELSE CONVERT(VARCHAR(4000),[Name]) END,'varchar' FROM ref.dbo.datatables WHERE id = 12 ORDER BY [ID] 解决方法错误是正确的,您不能隐式(或显式)将VARCHAR(MAX)转换为sql_variant.如果Name是VARCHAR(MAX),则需要将其转换为兼容类型(如VARCHAR(8000)),以将其作为参数传递给sys.fn_sqlvarbasetostr()见msdn:
如果您需要sys.fn_sqlvarbasetostr()的功能,并且无法在不丢失数据的情况下下转换您的col,则可能需要滚动自己的该功能版本. CLR将是一个很好的赌注. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |