T-SQL Konwersja typu image do varbinary(max) w wyzwalaczu

0

Mam prosty wyzwalacz o takie coś:

 IF EXISTS (SELECT name FROM sysobjects WHERE name = 'dodanieHistoriiDoFirmware' AND type = 'TR')
    DROP TRIGGER  [dbo].[dodanieHistoriiDoFirmware]
GO

CREATE TRIGGER dodanieHistoriiDoFirmware ON Firmware 
AFTER UPDATE
AS
DECLARE @IDFirmware int ,
	@Nazwa nvarchar(50),
	@Stan smallint,
	@Zalecenia nvarchar(max) ,
	@Powiadomienie bit ,
	@Startowe bit,
	@Oprogramowanie varbinary(max),
	@Os int,
	@DataModyfikacji datetime;

	select @IDFirmware = i.ID, @Nazwa = i.Nazwa, @Stan = i.Stan ,
	@Zalecenia = i.Zalecenia, @Powiadomienie = i.Powiadomienie , @Startowe = i.Startowe,
	@Oprogramowanie = i.Oprogramowanie, @Os = i.Os, @DataModyfikacji = i.DataModyfikacji from inserted i;

	insert into Firmware_Historia(IDFirmware,Nazwa,Stan,Zalecenia,Powiadomienie,Startowe,Oprogramowanie,Os,DataModyfikacji) 
	values(@IDFirmware,@Nazwa,@Stan,@Zalecenia,@Powiadomienie,@Startowe,@Oprogramowanie,@Os,@DataModyfikacji);

GO 
 

Moim zadaniem jest przekopiowanie danych z jednej tabeli do tabeli przechowującej dane historyczne. Problematyczne jest przeniesienie kolumny z oprogramowaniem, która zapisana została jako image w tabeli pierwotnej. Przy wykonaniu triggera wyskakuje mi błąd, który mówi, że nie mogę wykorzystać kolumny z typem image. Zadeklarowałem zmienną lokalną @oprogramowanie jako varbinary(max). Jednakże problem występuje przy dalszej instrukcji SELECT. Czy jest jakaś możliwość konwersji typów bez potrzeby zmiany typu kolumny w tabeli ?

0

A to? https://deepinthecode.com/2013/04/03/moving-data-from-the-image-datatype-to-varbinarymax-from-a-sql-server-2000-instance/

Oraz

W przypadku takaich triggerow nie jest chyba najlepszym pomyslem wkladanie danych do zmiennych, to nie jest oraclowy trigger wierszowy i Ci sie sypnie jak zrobisz na tabeli update kilku wierszy naraz.

0
Ldr napisał(a):

W przypadku takaich triggerow nie jest chyba najlepszym pomyslem wkladanie danych do zmiennych, to nie jest oraclowy trigger wierszowy i Ci sie sypnie jak zrobisz na tabeli update kilku wierszy naraz.

Tak więcej wyzwalaczy pisałem w Oraclu i zawsze taka konstrukcja działała. Nie zamierzam robić update na wielu wierszach naraz. Wszystko odbywać się będzie poprzez jedno zapytanie do jednego wiersza, więc być może nie będzie się sypać.

Z ciekawości jednak jakie rozwiązanie byś proponował ?

1

Napisz insert bezposrednio z selecta, mssql ma troche biedniejsze triggery niz oracle. No i to powinno rozwiazać Twój problem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1