【问题标题】:Implicit conversion from data type varchar to varbinary(max) is not allowed. Use the CONVERT不允许从数据类型 varchar 到 varbinary(max) 的隐式转换。使用转换
【发布时间】:2016-05-12 01:19:16
【问题描述】:

我收到以下错误:

"从数据类型 varchar 到 varbinary(max) 的隐式转换不是 允许。使用 CONVERT 函数运行此查询。"

注意:

@transientCartData 定义为varbinary(max)

@savedCartData 定义为varbinary(max)

查询:

exec [ecomm].[expiry_save_cart2_v1] 
@id=80094, 
@lastUpdated='2016-05-11 14:23:42.637',
@transientCartExpiryIntervalInMin='45',
@session_id='5C632166-D7D6-4F51-A87F-EED41376EEA7',
@version='TEST_VERSION',
@associated_slots='Null',
@account_id='TEST_ACCOUNT_ID',
@cookie='Null',
@transientCartData= 'TEST_DATA',
@savedCartData= 'TEST_DATA',
@data2='NULL',
@is_pricing_needed='1',
@savedCartExpiryIntervalInDays='14',
@persistentCartExpiryIntervalInDays='1',
@cart_type='PERSISTENT', 
@customerAccountId=TEST_ACCOUNT_ID

然后当我尝试使用@transientCartData = CONVERT(varbinary, 'TEST_DATA', 1) 时,我收到此错误:

关键字“CONVERT”附近的语法不正确。

【问题讨论】:

  • exec [ecomm].[expiry_save_cart2_v1] @id=80094 , @lastUpdated='2016-05-11 14:23:42.637', @transientCartExpiryIntervalInMin='45', @session_id='5C632166- D7D6-4F51-A87F-EED41376EEA7',@version='TEST_VERSION',@associated_slots='Null',@account_id='TEST_ACCOUNT_ID',@cookie='Null',@transientCartData='TEST_DATA',@savedCartData='TEST_DATA' , @data2='NULL',@is_pricing_needed='1', @savedCartExpiryIntervalInDays='14', @persistentCartExpiryIntervalInDays='1', @cart_type='PERSISTENT', @customerAccountId=TEST_ACCOUNT_ID
  • 请在您的实际问题中发布代码。
  • 这个错误是不言自明的。您能告诉我们将 VARCHAR 转换为二进制 BLOB 的逻辑吗?
  • @sam 你在运行 MySQL 还是 SQL-Server?您的语法似乎是 SQL-Server,但您的标签显示的是 MySQL。
  • 删除了 mysql 标签,添加了 sql-server,因为它看起来就是这样。不可能是mysql。

标签: sql-server


【解决方案1】:

SQL 服务器

SQL-Server 对Convert 具有以下语法。

CONVERT(data_type [(长度)],表达式[,样式])

由于 style 设置为 1,您的代码失败。

如果 data_type 是二进制类型,则表达式必须是字符表达式。表达式必须由偶数个十六进制数字组成(0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F、a、b、c , d, e, f)。 ...

您需要将其设置为 0(默认)。

将 ASCII 字符转换为二进制字节或将二进制字节转换为 ASCII 字符...

示例转换用法,生成 0x544553545F44415441

Declare @vb as varbinary(max)
Set @vb =  CONVERT(varbinary(max), 'TEST_DATA', 0)
select @vb

MySQL

根据documentation for Convert,您的方法签名不正确。

CONVERT 具有以下 MySQL 语法:

CONVERT(expr,type), CONVERT(expr USING transcoding_name)


在 MySQL 中调用存储过程使用Call

调用 sp_name([参数[,...]])

一个用法的例子是:

mysql> SET @increment = 10;
mysql> CALL p(@version, @increment);
mysql> SELECT @version, @increment;
+--------------+------------+
| @version     | @increment |
+--------------+------------+
| 5.5.3-m3-log |         11 |
+--------------+------------+

【讨论】:

  • 先试试CONVERT( 'TEST_DATA', binary(10))
  • 是否可以在 exec 存储的 proc 查询上编写 Concert 函数?因为我在关键字'CONVERT'附近得到不正确的语法下面是我更新的查询exec [ecomm]。[expiry_save_cart2_v1] @id=80094,@lastUpdated='2016-05-11 14:23:42.637',@transientCartExpiryIntervalInMin=' 45',@session_id='5C632166-D7D6-4F51-A87F-EED41376EEA7',@version='TEST_VERSION',@associated_slots='Null',@account_id='TEST_ACCOUNT_ID',@cookie='Null',@transientCartData=CONVERT ('TEST_DATA', binary(10)), @savedCartData= CONVERT('TEST_DATA', binary(10)), @data2='NULL',
猜你喜欢
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
  • 1970-01-01
  • 2018-04-30
  • 1970-01-01
相关资源
最近更新 更多