gpt4 book ai didi

sql-server - 操作数类型冲突

转载 作者:行者123 更新时间:2023-12-02 09:31:24 25 4
gpt4 key购买 nike

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

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]

最佳答案

错误是正确的,您不能隐式(或显式)将 VARCHAR(MAX) 转换为 sql_variant。如果 NameVARCHAR(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 将是一个不错的选择。

关于sql-server - 操作数类型冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7969508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com