我有一些格式为ASCII十六进制的源数据。我需要将它放入VARBINARY字段中的SQL数据库中。我把问题简化到了最低限度,以说明我想做的事情。我有一个存储过程:
CREATE PROCEDURE BinaryDemo
@BinaryData varbinary(max)
AS
BEGIN
PRINT @BinaryData;
END
我知道它“有效”,因为我能做到:
DECLARE @tmp varbinary(max);
SET @tmp = CONVERT(varbinary, '1234567890abcdef', 2);
EXEC BinaryDemo @BinaryData=@tmp;
我想要做的是跳过中间步骤并调用以下过程:
EXEC BinaryDemo @BinaryData=CONVERT(varbinary, '1234567890abcdef', 2);
不幸的是,SQL抱怨语法:关键字'CONVERT'附近的语法不正确。
我知道CONVERT是正确的,因为我可以:
PRINT CONVERT(varbinary, '1234567890abcdef', 2);
我完全看到了我的期望。由于源数据的性质和数量,第一个例子(declare / set / exec)实际上是一个糟糕的选择。
答案 0 :(得分:1)
但我不认为这是可能的。它就像:
效果很好:
DECLARE @r DATETIME
SET @r=GETDATE()
EXEC [dbo].[sp_myDatePrinter] @d=@r
糟糕:
DECLARE @r DATETIME
EXEC [dbo].[sp_myDatePrinter] @d=GETDATE();