2013-05-07 81 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