加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 操作数类型冲突

发布时间:2020-12-12 07:49:32 所属栏目:MsSql教程 来源:网络整理
导读:我有一个很长的存储过程,当我执行该过程我得到以下错误: Msg 206,Level 16,State 2,Line 1Operand type clash: varchar(max) is incompatible with sql_variant 所以麻烦拍摄我已经打印了问题所在的satetement,代码是: SELECT 'Name',7,CASE WHEN 'varchar'
我有一个很长的存储过程,当我执行该过程我得到以下错误:
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:

sql_variant objects can hold data of any SQL Server data type except text,ntext,image,varchar(max),nvarchar(max),varbinary(max),xml,timestamp,and Microsoft .NET Framework common language runtime (CLR) user-defined types. An instance of sql_variant data also cannot have sql_variant as its underlying base data type.

如果您需要sys.fn_sqlvarbasetostr()的功能,并且无法在不丢失数据的情况下下转换您的col,则可能需要滚动自己的该功能版本. CLR将是一个很好的赌注.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读