2011-11-21 164 views
4

我有一些格式为ASCII十六进制的源数据。我需要将它放到VARBINARY字段中的SQL数据库中。我已经将问题简化为最低限度,以说明我想要做什么。我有一个存储过程:将VARBINARY传递给存储过程

CREATE PROCEDURE BinaryDemo 
    @BinaryData varbinary(max) 
AS 
BEGIN 
    PRINT @BinaryData; 
END 

我知道它“作品”,因为我可以做的:

DECLARE @tmp varbinary(max); 
SET @tmp = CONVERT(varbinary, '1234567890abcdef', 2); 
EXEC BinaryDemo @[email protected]; 

我希望做的是跳过中间步骤,并调用类的方法:

EXEC BinaryDemo @BinaryData=CONVERT(varbinary, '1234567890abcdef', 2); 

不幸的是,SQL抱怨语法:关键字 '转换' 附近语法不正确。

我知道CONVERT是正确的,因为我可以:

PRINT CONVERT(varbinary, '1234567890abcdef', 2); 

,我看看到底是什么我的期望。由于源数据的性质和数量,第一个示例(declare/set/exec)确实是一个糟糕的选项。

+0

**哪个版本的SQL Server **您使用的? –

+0

可能的重复[转换整型和连接到varchar在TSQL](http://stackoverflow.com/questions/4936180/cast-integer-and-concatenate-to-varchar-in-tsql) –

+0

@marc_s:SQL 2008R2; – BillP3rd

回答

1

不错的问题。

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

做工不错:

DECLARE @r DATETIME 
    SET @r=GETDATE() 

    EXEC  [dbo].[sp_myDatePrinter] @[email protected] 

不好:

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