15. juni 2012 - 10:49Der er
6 kommentarer og 1 løsning
Bruge inserted i trigger med variabelt tabelnavn
Hejsa
Jeg skal lave en trigger der ser på en celle i det der bliver indsat. Hvis der ikke findes en tabel med cellens navn i forvejen, skal tabellen oprettes.
Uanset skal det der bliver indsat så også sættes ind i denne tabel.
Mit problem er at jeg ikke kan få det til at virke med variabelt tabel navn. Nogen ideer?
-- Check if trigger exists and delete IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[DistributeLogs]') AND OBJECTPROPERTY(id, N'IsTrigger') = 1) DROP trigger [dbo].[DistributeLogs] GO
-- Make trigger CREATE TRIGGER dbo.DistributeLogs ON dbo.LogData AFTER INSERT AS DECLARE @tmpname int SET @tmpname = (SELECT Unc FROM INSERTED) DECLARE @UNCNAME varchar(5) SET @UNCNAME = CONVERT(varchar,@tmpname) DECLARE @sqlCommand varchar(1000)
Jeg endte ud med det her (inden Arne skrev, men tak for svar alligevel)... Det virker faktisk fint, men ville jo gerne koge det ned hvis man kan.
---------------------------------------------- -- Check if trigger exists and delete IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[DistributeLogs]') AND OBJECTPROPERTY(id, N'IsTrigger') = 1) DROP trigger [dbo].[DistributeLogs] GO
-- Make trigger CREATE TRIGGER dbo.DistributeLogs ON dbo.LogData AFTER INSERT AS DECLARE @UNCNAME varchar(5) SET @UNCNAME = CONVERT(varchar(5),(SELECT Unc FROM INSERTED)) DECLARE @sqlCommand varchar(1000)
DECLARE @Unc int DECLARE @Obj int DECLARE @Mnemonic varchar(16) DECLARE @ObjType int DECLARE @Server int DECLARE @TimeStamp datetime DECLARE @Value float DECLARE @Message varchar(21) SET @Unc = (SELECT CAST(Unc AS int) FROM inserted) SET @Obj = (SELECT CAST(Obj AS int) FROM inserted) SET @Mnemonic = (SELECT Mnemonic FROM inserted) SET @ObjType = (SELECT CAST(ObjType AS int) FROM inserted) SET @Server = (SELECT CAST(Server AS int) FROM inserted) SET @TimeStamp = (SELECT CAST(TimeStamp AS datetime) FROM inserted) SET @Value = (SELECT Value FROM inserted) SET @Message = (SELECT [Message] FROM inserted)
SET @sqlCommand = 'INSERT INTO "' + @UNCNAME + '" VALUES('+CONVERT(varchar,@Unc)+','+CONVERT(varchar,@Obj)+','''+@Mnemonic+''','+CONVERT(varchar,@ObjType)+','+CONVERT(varchar,@Server)+','''+CONVERT(varchar,@TimeStamp)+''','+CONVERT(varchar,@Value)+','''+@Message+''')' EXEC (@sqlCommand)
Ville egentlig gerne have givet Janus_007 point, men jeg mangler uddybende forklaring.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.