Сохраните байт [], хранящийся в параметре SQL XML, в поле varbinary (MAX) в SQL Server 2005. Это можно сделать? - PullRequest
2 голосов
/ 28 апреля 2010

Сохранить байт [], сохраненный в параметре SQL XML, в поле varbinary (MAX) в SQL Server 2005. Это можно сделать?

Вот моя хранимая процедура:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

ALTER   PROCEDURE [dbo].[AddPerson]
 @Data AS XML
AS  
 INSERT INTO Persons (name,image_binary)
 SELECT 
  rowWals.value('./@Name', 'varchar(64)') AS [Name],
  rowWals.value('./@ImageBinary', 'varbinary(MAX)') AS [ImageBinary]
 FROM 
  @Data.nodes ('/Data/Names') as b(rowVals)

 SELECT SCOPE_IDENTITY() AS Id

В моей схеме Name имеет тип String, а ImageBinary имеет тип byte []. Должен ли я использовать тип String для ImageBinary тоже? Тогда нужно ли мне как-то специально кодировать эту строку?

Ответы [ 2 ]

1 голос
/ 28 апреля 2010

Предполагая, что вы используете Base64 для байта [] в XML, подход, который использует XQuery, как описано в следующей статье, должен работать:

http://blogs.msdn.com/sqltips/archive/2008/06/30/converting-from-base64-to-varbinary-and-vice-versa.aspx

0 голосов
/ 28 апреля 2010

Вероятно, нет.

XML является буквенно-цифровым (например, коды> 32), где byte [] будет 0-> 255.

В этом случае у вас есть 2 набора данных: имя и BLOB. Так относись к ним как к такому, нет?

ALTER  PROCEDURE [dbo].[AddPerson]
 @Name AS varchar(64)
 @Data AS varbinary(max)
AS  
 INSERT INTO Persons (name, image_binary)
 VALUES (@Name, @Data)
 SELECT SCOPE_IDENTITY() AS Id
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...