1

Я хочу заполнить столбец varbinary (MAX) таблицы базы данных SQL Server, когда когда-либо создается новая запись с помощью изображение по умолчанию. Как это сделать с помощью триггера или в этом случае любым другим способом?Как заполнить столбец varbinary (MAX) по умолчанию для всех записей в SQL Server 2005 Express

Это T-SQL код, который я пробовал:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER TRIGGER [dbo].[Trg_DoctorDemographic_DefaultImage] 
ON [ECGManagementSystem].[dbo].[DoctorDemographic] 
AFTER INSERT 
NOT FOR REPLICATION 
AS 
BEGIN 
    INSERT INTO[ECGManagementSystem].[dbo].[DoctorDemographic] 
    (DPhoto) 
    SELECT * FROM OPENROWSET(Bulk N'D:\Programs\MSVC\Exercises\BEMS\BEMS\res\Doctor.bmp',SINGLE_BLOB)AS BLOB 
END; 

ответ

1

я был бы склонен использовать отдельную таблицу для хранения картины, и завернуть это в скалярном UDF, который определяется как значение по умолчанию ограничение.

Если только, чтобы избежать ненужных вызовов OPENROWSET в триггерах ...

+0

Спасибо за предложение Mr.GBN –

5

Нет, не делать это таким образом.

Если у вас 1000 строк с этим значением по умолчанию, у вас будет 1000 копий этого изображения? Размер вашей базы данных будет быстро расти. Если вы хотите изменить значение по умолчанию, вам необходимо обновить 1000 изображений. Нехорошо.

Магазин 1 копия в 1 месте - возможно, таблица под названием DefaultDPhoto. Держите столбец изображения нулевым в своей таблице DoctorDemographic, когда он по умолчанию, а затем, когда вы переходите на получение изображения, есть логика, если этот столбец равен NULL, потяните одиночную копию.

РЕДАКТИРОВАТЬ:

Хорошо, сначала я бы хранимая процедура, как:

create proc getDPhoto(@ID int) 
as 
begin 
set nocount on 

if exists (select 1 from DoctorDemographic where id = @ID and DPhoto is not null) 
    select DPhoto from DoctorDemographic where id = @ID 
else 
    select DPhoto from DefaultDPhoto 

end 

Тогда из этого примера here в качестве отправной точки я бы изменить шаг 1 в разделе «Извлечение изображения», чтобы следующие:

SqlCommand cmdSelect = new SqlCommand("getDPhoto"); 

cmdSelect.CommandType = CommandType.StoredProcedure; 
+0

Спасибо очень много г-на Дж. Брукса. Но поскольку я уже упоминал, что я новичок в SQL-сервере, это будет большой помощью, если вы сможете объяснить использование какого-либо кода. Ничего, если у вас мало времени. Еще раз спасибо –

+0

Подсказка: вы можете использовать CASE/WHEN в запросе SELECT для возврата изображения по умолчанию, когда столбец источника равен NULL. – RickNZ

+0

Спасибо Mr.Brooks .... спасибо за ваше драгоценное время. Я попробую ваше предложение как можно скорее и дам вам знать результат. Я ценю вам любезную помощь. Еще раз спасибо –

0

Может быть, что-то вроде этого?

SELECT [DColumnName1] 
    , [DColumnName2] 
    , CASE WHEN [DPhoto] IS NULL THEN (SELECT * FROM OPENROWSET(Bulk N'D:\Programs\MSVC\Exercises\BEMS\BEMS\res\Doctor.bmp',SINGLE_BLOB)AS BLOB) ELSE [DPhoto] END [DPhoto] 
    FROM [ECGManagementSystem].[dbo].[DoctorDemographic] 
WHERE Something = 'Matching'; 

Edit: Ну, если вы действительно хотите копии изображения в таблице, чтобы исправить [OMG Ponies] вставить ниже попробовать это тогда.

SET @Image = (SELECT BulkColumn FROM OPENROWSET(Bulk N'D:\Programs\MSVC\Exercises\BEMS\BEMS\res\Doctor.bmp',SINGLE_BLOB)AS BLOB); 

Вместо:

SELECT @image = column FROM OPENROWSET(Bulk N'D:\Programs\MSVC\Exercises\BEMS\BEMS\res\Doctor.bmp', SINGLE_BLOB) AS BLOB 

Делать это делает его более трудным, чтобы изменить картинку по умолчанию позже, хотя, но это ваша БД :)

+0

Спасибо Mr.Don ...... Но моя идея - автоматически заполнить этот столбец при вводе записи вручную или с помощью любого оператора INSERT или UPDATE. Я буду более чем рад, если вы сможете опубликовать код чтобы сохранить вышеупомянутое требование. Ваша помощь высоко ценится. Еще раз спасибо –

+0

Я вам благодарен за вашу помощь Mr.Don.Thank вас еще раз. –

Смежные вопросы