将VARBINARY传递给存储过程

时间:2011-11-21 19:26:35

标签: stored-procedures parameters sql-server-2008-r2 varbinary

我有一些格式为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)实际上是一个糟糕的选择。

1 个答案:

答案 0 :(得分:1)

好的问题。

但我不认为这是可能的。它就像:

效果很好:

  DECLARE @r DATETIME
    SET @r=GETDATE()

    EXEC     [dbo].[sp_myDatePrinter] @d=@r

糟糕:

DECLARE @r DATETIME
    EXEC     [dbo].[sp_myDatePrinter] @d=GETDATE();