加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 数据库 > MsSql > 正文

sql-server – 操作数类型冲突

发布时间:2020-05-23 23:00:34 所属栏目:MsSql 来源:互联网
导读:我有一个很长的存储过程,当我执行该过程我得到以下错误: Msg 206, Level 16, State 2, Line 1Operand type clash: varchar(max) is incompatible with sql_variant 所以麻烦拍摄我已经打印了问题所在的satetement,代码是: SELECT Name , 7 ,

我有一个很长的存储过程,当我执行该过程我得到以下错误:

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将是一个很好的赌注.

(编辑:安卓应用网)

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

    推荐文章
      热点阅读