Re: вставить значение в поле типа image
От: sadomovalex Россия http://sadomovalex.blogspot.com
Дата: 03.07.06 08:33
Оценка: 1 (1)
Здравствуйте, sadomovalex, Вы писали:

разобрался с вопросом.. ссылка для потомков http://www.sql.ru/forum/actualthread.aspx?tid=310301
"Что не завершено, не сделано вовсе" Гаусс
вставить значение в поле типа image
От: sadomovalex Россия http://sadomovalex.blogspot.com
Дата: 30.06.06 16:50
Оценка:
всем привет
поискал по форуму, погуглил — к своему удивлению удовлетворительного ответа не нашел
чтобы записать данные типа image в таблицу, нужно получить валидный указатель на страницу. Цитата из BOL:

To create a text pointer, execute an INSERT or UPDATE statement with data that is not NULL for the text, ntext, or image column

и далее:

Inserting a null value into a text or image column does not create a valid text pointer, nor does it preallocate an 8-KB text page

Соответственно возникает вопрос: что использовать в качестве этого ненулевого значения при insert-е в столбец типа image? В случае text/ntext можно использовать к примеру пустую строку, а с image непонятно
вот код:
CREATE TABLE [dbo].[attachment] (
    [AttachmentId] [int] IDENTITY (1, 1) NOT NULL ,
    [Name] [nvarchar] (255) NOT NULL ,
    [Content] [image] NOT NULL ,
    [Type] [nvarchar] (10) NOT NULL ,
    [MailId] [int] NOT NULL 
) ON [PRIMARY]
...

/**************************************************************************************/
/**/
CREATE PROCEDURE up_InsertAttachment
@name nvarchar (255),
@content image,
@type nvarchar(10),
@mailId int
AS
    -- чтобы это сделать надо добавить DEFAULT значение для поля Content. Какое???
    INSERT INTO attachment ([Name], Type, MailId)
    VALUES (@name, @type, @mailId)

    DECLARE @attachmentId int
    SET @attachmentId = SCOPE_IDENTITY()
    
    DECLARE DECLARE @ptr binary(16)
    SELECT @ptr = TEXTPTR(Content)
    FROM attachment
    WHERE AttachmentId = @attachmentId

    WRITETEXT attachment.Content @ptr @content
GO
"Что не завершено, не сделано вовсе" Гаусс
Re: вставить значение в поле типа image
От: RiskServer  
Дата: 02.07.06 02:27
Оценка:
Любая последовательность байтов прокатит. Например так:

INSERT INTO attachment ([Name], Type, MailId, Content)
VALUES (@name, @type, @mailId, 0xDEADBEEF)
Re[2]: вставить значение в поле типа image
От: sadomovalex Россия http://sadomovalex.blogspot.com
Дата: 03.07.06 06:58
Оценка:
Здравствуйте, RiskServer, Вы писали:

RS>Любая последовательность байтов прокатит. Например так:


RS>
RS>INSERT INTO attachment ([Name], Type, MailId, Content)
RS>VALUES (@name, @type, @mailId, 0xDEADBEEF)
RS>


меня смущает то, что для данных типа image в столбце хранится не данные, а указатель. Соответственно 0xDEADBEEF — это какой-то адрес в памяти, и если я захочу изменить содержимое этого поля с помощью UPDATETEXT или WRITETEXT, то перетру данные по этому адресу. Или я не прав?
"Что не завершено, не сделано вовсе" Гаусс
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.