2013-05-07 65 views
1

我一直被困在一个动态的sql问题上。 我需要能够将varbinary(byte [])数据保存到我的表中。Dynamic Sql转换插入varbinary数据

下面是示例代码只是为了显示我的问题:

ALTER PROCEDURE ins_photo 
@schema VARCHAR(63), @name VARCHAR(50), @data VARBINARY(MAX) 
AS 

PRINT @data; 

EXEC (' 

PRINT '''[email protected]+'''; 

DECLARE @plswork VARBINARY(MAX) = CAST('''[email protected]+''' AS VARBINARY(MAX)) 

PRINT @plswork; 

INSERT INTO '[email protected]+'.Tester 
(name, photo) 
VALUES 
(
'''[email protected]+''', 
@plswork 
) 
') 

这里是输出:

0xFFD8FFE000104A4649460001010000 
?????A 
0x3F3F3F3F3F410100 

(1 row(s) affected) 

正如你将在转换注意到初始二进制数据和“转换”是不同的,因此,当检索二进制数据显示图像...以及没有揭示什么:)

我真的很感谢帮助或甚至工作,但主要这个usp需要根据模式调用不同的表。 (因此,为什么我使用动态SQL)

我能保存图像作为为nvarchar(max)和客户端上使用ToBase64String()?,我wouldve认为这是一个糟糕的解决方案,但也不太清楚

提前感谢 Marco

回答

2

我不知道你为什么面临这个问题。但不是将@data连接到动态sql字符串,而是尝试将它作为参数传递。参考下面提到的例子。

DECLARE @Color varchar(16) = 'Blue', @LastProduct varchar(64) 
SET @SQL =  N'SELECT @pLastProduct = max(Name) 
        FROM AdventureWorks2008.Production.Product 
        WHERE Color = @pColor' 
SET @ParmDefinition = N'@pColor varchar(16), 
         @pLastProduct varchar(64) OUTPUT' 
EXECUTE sp_executeSQL 
      @SQL, 
      @ParmDefinition, 
      @pColor = @Color, 
      @pLastProduct OUTPUT 
+0

的工作,非常感谢你:)谢谢 – EaziLuizi 2013-05-07 10:51:07

0

尝试发送VARCHAR变量而不是VARBINARY到EXEC查询字符串中。

添加

DECLARE @dataCHAR VARCHAR(MAX); 
SET @dataCHAR = @data; 

所以程序看起来像:

ALTER PROCEDURE ins_photo 
@schema VARCHAR(63), @name VARCHAR(50), @data VARBINARY(MAX) 
AS 

PRINT @data; 

DECLARE @dataCHAR VARCHAR(MAX); 
SET @dataCHAR = @data; 

EXEC (' 

PRINT '''[email protected]+'''; 

DECLARE @plswork VARBINARY(MAX) = CAST('''[email protected]+''' AS VARBINARY(MAX)) 

PRINT @plswork; 

INSERT INTO '[email protected]+'.Tester 
(name, photo) 
VALUES 
(
'''[email protected]+''', 
@plswork 
) 
') 
+0

感谢它确实有一个小的(非常小的)图像工作的响应,它失败的更大的图像...嗯 – EaziLuizi 2013-05-07 09:39:06

+0

对于我提出的问题你的解决方案是正确的,所以非常感谢你,虽然我使用大型图像的实现,所以其他答案是“更多”正确..再次感谢你,虽然非常感谢 – EaziLuizi 2013-05-07 10:52:50

相关问题