Ir para conteúdo
Fórum Script Brasil

moliveira

Membros
  • Total de itens

    2
  • Registro em

  • Última visita

Sobre moliveira

moliveira's Achievements

0

Reputação

  1. bem... descobri o erro.... esta foi muito má... a variavel @SQLCreateOrUpdateTrigger não tinha caracteres suficientes
  2. Olá, Estou a implementar um sistema de histórico para uma aplicação parametrizável ao nível do utilizador. O que pretendo fazer é uma tabela que armazena os campos que se pretende auditar que contem os seguintes campos: - TableField - TableName - DescriptionToShow ao inserir ou eliminar um campo para histórico é executado um trigger que invoca um procedimento e caso seja um insert irá criar/actualizar um tabela 'TableName'_History e criar um trigger para 'vigiar' as alterações naquele campo. Isto no final é um bocado mais complexo, mas agora estou com o seguinte problema: Este stored procedure é só para testes, ALTER PROCEDURE [dbo].[create_track_changes_field] @TableName varchar(50) = '', @FieldName varchar(50) = '' AS Declare @SQLCreateOrUpdateTrigger nvarchar(500) Declare @SQLCreateTable nvarchar(500) Select @SQLCreateTable = N' CREATE TABLE [dbo].['+@TableName+'_History]( [id] [int] IDENTITY(1,1) NOT NULL, [OldField] [nvarchar](50) NULL, [NewField] [nvarchar](50) NULL, [LineId] [int] NOT NULL, [userId] [int] NOT NULL, [FieldDescription] [nvarchar](50) NULL, CONSTRAINT [PK_'+@TableName+'_History] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY]' Select @SQLCreateOrUpdateTrigger = N' CREATE TRIGGER '+@TableName+@FieldName+' ON dbo.'+@TableName+' AFTER UPDATE, INSERT, DELETE AS DECLARE @OldValue varchar(150) DECLARE @NewValue varchar(150) DECLARE @LineId int DECLARE @UserId int DECLARE @Description nvarchar(100) SELECT @OldValue = Name FROM DELETED; SELECT @NewValue = Name FROM INSERTED; SELECT @LineId = Id FROM INSERTED; SELECT @UserId = UpdatedBy FROM INSERTED; SET @Description =(SELECT [DescriptionToShow] FROM [dbo].[HistoryFields] where [FieldName] = '''+@FieldName+'''); BEGIN PRINT(''123''); END' BEGIN PRINT(''+@TableName+'_History') --Exec SP_ExecuteSQL @SQLCreateTable Exec SP_ExecuteSQL @SQLCreateOrUpdateTrigger Print('sdf') END Na execução do procedimento a linha a vermelho está a dar o seguinte erro: Msg 105, Level 15, State 1, Procedure ClientName, Line 14 Unclosed quotation mark after the character string 'd'. Msg 102, Level 15, State 1, Procedure ClientName, Line 14 Incorrect syntax near 'd'. Ao meter a linha em comentário, o trigger é criado da seguinte forma: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER TRIGGER [dbo].[ClientName] ON [dbo].[Client] AFTER UPDATE, INSERT, DELETE AS DECLARE @OldValue varchar(150) DECLARE @NewValue varchar(150) DECLARE @LineId int DECLARE @UserId int DECLARE @Description nvarchar(100) SELECT @OldValue = Name FROM DELETED; SELECT @NewValue = Name FROM INSERTED; SELECT @LineId = Id FROM INSERTED; SELECT @UserId = UpdatedBy FROM INSERTED; --SET @Description = (SELECT [DescriptionToShow] FROM Não assume a linha por completo. alguém me consegue ajudar? Obrigado
×
×
  • Criar Novo...