SQL-запрос для хранения текстовых данных в Varbinary (макс.) - PullRequest
4 голосов
/ 30 января 2012

Есть ли способ заставить varbinary принимать текстовые данные в SQL Server?

Вот моя ситуация.У меня достаточно большое количество XML-файлов, которые я планирую хранить в «сжатом» формате.(Это означает Varbinary.)

Однако, когда я отлаживаю, я хочу иметь возможность переключать конфигурационный переключатель и сохранять его в виде простого текста, чтобы я мог устранять неполадки из базы данных (т. Е. Ни одно клиентское приложение длятребуется zip).

Можно ли вставить обычный текст в varbinary (max)?

Ответы [ 2 ]

3 голосов
/ 30 января 2012

Можно ли вставить обычный текст в varbinary (max)?

Да , просто будьте уверены в том, что вы храните, чтобы вы знали, как его вернуть. Это может пролить некоторый свет на это:

-- setup test table
declare @test table (
    data varbinary(max) not null,
    datatype varchar(10) not null
)

-- insert varchar
insert into @test (data, datatype) select cast('asdf' as varbinary(max)), 'varchar'
-- insert nvarchar
insert into @test (data, datatype) select cast(N'asdf' as varbinary(max)), 'nvarchar'

-- see the results
select data, datatype from @test
select cast(data as varchar(max)) as data_to_varchar, datatype from @test
select cast(data as nvarchar(max)) as data_to_nvarchar, datatype from @test

UPDATE: Все это предполагает, конечно, что вы не хотите использовать выразительную мощь родного типа данных SQL Server. Тип данных XML также, по-видимому, достаточно эффективно хранит свое содержимое. В своей базе данных я регулярно вижу, что это всего лишь половина размера равной строки varchar, в соответствии с длиной данных (). Это может быть не так уж и научно, и, конечно же, YMMV.

1 голос
/ 30 января 2012

Вы можете использовать этот ответ , чтобы преобразовать вашу строку в байтовый массив и вставить результат в столбец varbinary(max).Идея состоит в том, чтобы использовать BinaryFormatter с MemoryStream для сериализации строки, извлечь результирующий байтовый массив из потока памяти и записать его в столбец varbinary(max).

...