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)
Mød TrackMan og Veo på Computerworld Cloud & AI Festival og hør, hvordan tech ændrer måden, vi træner og udvikler talent – fra skolebold til The Masters.
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.