Erro ao Criar Trigger
Salve galera,
Nunca havia mechido com trigger esta manhã então peguei o exemplo no Help do SQL para poder entender seu funcionamento.
segue exemplo
USE pubs
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'employeeData')
DROP TABLE employeeData
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'auditEmployeeData')
DROP TABLE auditEmployeeDataGO
CREATE TABLE employeeData (
emp_id int NOT NULL,
emp_bankAccountNumber char (10) NOT NULL,
emp_salary int NOT NULL,
emp_SSN char (11) NOT NULL,
emp_lname nchar (32) NOT NULL,
emp_fname nchar (32) NOT NULL,
emp_manager int NOT NULL
)GO
CREATE TABLE auditEmployeeData (
audit_log_id uniqueidentifier DEFAULT NEWID(),
audit_log_type char (3) NOT NULL,
audit_emp_id int NOT NULL,
audit_emp_bankAccountNumber char (10) NULL,
audit_emp_salary int NULL,
audit_emp_SSN char (11) NULL,
audit_user sysname DEFAULT SUSER_SNAME(),
audit_changed datetime DEFAULT GETDATE()
)GO
CREATE TRIGGER updEmployeeData
ON employeeData
FOR update AS
/Check whether columns 2, 3 or 4 has been updated. If any or all of columns 2, 3 or 4 have been changed, create an audit record. The bitmask is: power(2,(2-1))+power(2,(3-1))+power(2,(4-1)) = 14. To check if all columns 2, 3, and 4 are updated, use = 14 in place of >0 (below)./
IF (COLUMNS_UPDATED() & 14) > 0
/Use IF (COLUMNS_UPDATED() & 14) = 14 to see if all of columns 2, 3, and 4 are updated./
BEGIN
-- Audit OLD record.
INSERT INTO auditEmployeeData
(audit_log_type,
audit_emp_id,
audit_emp_bankAccountNumber,
audit_emp_salary,
audit_emp_SSN)
SELECT 'OLD',
del.emp_id,
del.emp_bankAccountNumber,
del.emp_salary,
del.emp_SSN
FROM deleted del
-- Audit NEW record.
INSERT INTO auditEmployeeData
(audit_log_type,
audit_emp_id,
audit_emp_bankAccountNumber,
audit_emp_salary,
audit_emp_SSN)
SELECT 'NEW',
ins.emp_id,
ins.emp_bankAccountNumber,
ins.emp_salary,
ins.emp_SSN
FROM inserted ins
ENDGO
/*Inserting a new employee does not cause the UPDATE trigger to fire.*/
INSERT INTO employeeData
VALUES ( 101, 'USA-987-01', 23000, 'R-M53550M', N'Mendel', N'Roland', 32)
GO
/*Updating the employee record for employee number 101 to change the salary to 51000 causes the UPDATE trigger to fire and an audit trail to be produced.*/
UPDATE employeeData
SET emp_salary = 51000
WHERE emp_id = 101
GO
SELECT * FROM auditEmployeeData
GO
/*Updating the employee record for employee number 101 to change both the bank account number and social security number (SSN) causes the UPDATE trigger to fire and an audit trail to be produced.*/
UPDATE employeeData
SET emp_bankAccountNumber = '133146A0', emp_SSN = 'R-M53550M'
WHERE emp_id = 101
GO
SELECT * FROM auditEmployeeData
GO
Porem quando adaptei para o que precisava deu o seguinte erro
segue exemplo completo
CREATE TRIGGER TRG_LETRA
ON TB_LETRA
FOR UPDATE, DELETE AS
/Check whether columns 2, 3 or 4 has been updated. If any or all of columns 2, 3 or 4 have been changed, create an audit record. The bitmask is: power(2,(2-1))+power(2,(3-1))+power(2,(4-1)) = 14. To check if all columns 2, 3, and 4 are updated, use = 14 in place of >0 (below)./
IF (COLUMNS_UPDATED() & 14) > 0
/Use IF (COLUMNS_UPDATED() & 14) = 14 to see if all of columns 2, 3, and 4 are updated./
BEGIN
-- Audit OLD record.
INSERT INTO TB_LETRA_HIST
(
LET_VAR_TIPO,
LET_INT_HIST_ID,
LET_VAR_HIST_LETRA,
LET_VAR_HIST_DESCRICAO,
LET_INT_HIST_ATIVO,
LET_DAT_HIST_CADASTRO,
LET_INT_HIST_USU_CADASTRO,
LET_DAT_HIST_ALTERADO_EM,
LET_DAT_HIST_LIBERADO
)
SELECT 'OLD',
del.LET_INT_ID,
del.LET_VAR_LETRA,
del.LET_VAR_DESCRICAO,
del.LET_INT_ATIVO,
del.LET_DAT_CADASTRO,
del.LET_INT_USU_CADASTRO,
del.LET_DAT_ALTERADO_EM,
del.LET_DAT_HIST_LIBERADO
FROM deleted del
-- Audit NEW record.
INSERT INTO TB_LETRA_HIST
(
LET_VAR_TIPO,
LET_INT_HIST_ID,
LET_VAR_HIST_LETRA,
LET_VAR_HIST_DESCRICAO,
LET_INT_HIST_ATIVO,
LET_DAT_HIST_CADASTRO,
LET_INT_HIST_USU_CADASTRO,
LET_DAT_HIST_ALTERADO_EM,
LET_DAT_HIST_LIBERADO
)
SELECT 'NEW',
ins.LET_INT_HIST_ID,
ins.LET_VAR_HIST_LETRA,
ins.LET_VAR_HIST_DESCRICAO,
ins.LET_INT_HIST_ATIVO,
ins.LET_DAT_HIST_CADASTRO,
ins.LET_INT_HIST_USU_CADASTRO,
ins.LET_DAT_ALTERADO_EM,
ins.LET_DAT_HIST_LIBERADO
FROM inserted ins
ENDGO
Erros
Server: Msg 207, Level 16, State 3, Procedure TRG_LETRA, Line 10
Invalid column name 'LET_DAT_HIST_LIBERADO'.
Server: Msg 207, Level 16, State 1, Procedure TRG_LETRA, Line 34
Invalid column name 'LET_INT_HIST_ID'.
Server: Msg 207, Level 16, State 1, Procedure TRG_LETRA, Line 34
Invalid column name 'LET_VAR_HIST_LETRA'.
Server: Msg 207, Level 16, State 1, Procedure TRG_LETRA, Line 34
Invalid column name 'LET_VAR_HIST_DESCRICAO'.
Server: Msg 207, Level 16, State 1, Procedure TRG_LETRA, Line 34
Invalid column name 'LET_INT_HIST_ATIVO'.
Server: Msg 207, Level 16, State 1, Procedure TRG_LETRA, Line 34
Invalid column name 'LET_DAT_HIST_CADASTRO'.
Server: Msg 207, Level 16, State 1, Procedure TRG_LETRA, Line 34
Invalid column name 'LET_INT_HIST_USU_CADASTRO'.
Server: Msg 207, Level 16, State 1, Procedure TRG_LETRA, Line 34
Invalid column name 'LET_DAT_HIST_LIBERADO'.
Porem ja criei as tabelas como consta no script abaixo e dou select, insert, update normal na tabela.
CREATE TABLE TB_LETRA(
LET_INT_ID INT IDENTITY(1,1) NOT NULL,
LET_VAR_LETRA VARCHAR(3),
LET_VAR_DESCRICAO VARCHAR(100),
LET_INT_ATIVO INT NOT NULL DEFAULT 1,
LET_DAT_CADASTRO DATETIME NOT NULL DEFAULT GETDATE(),
LET_INT_USU_CADASTRO INT NOT NULL,
LET_DAT_ALTERADO_EM DATETIME NULL,
LET_DAT_LIBERADO INT NOT NULL DEFAULT 0,
CONSTRAINT PK_LETINTID_LETRA PRIMARY KEY(LET_INT_ID),
CONSTRAINT FK_LETINTUSUCADASTRO_LETRA FOREIGN KEY(LET_INT_USU_CADASTRO) REFERENCES TB_USUARIO(USU_INT_ID),
CONSTRAINT UQ_LETVARLETRA_LETRA UNIQUE(LET_VAR_LETRA)
)
CREATE TABLE TB_LETRA_HIST
(
LET_VAR_TIPO VARCHAR(10),
LET_INT_HIST_ID INT NULL,
LET_VAR_HIST_LETRA VARCHAR(3),
LET_VAR_HIST_DESCRICAO VARCHAR(100),
LET_INT_HIST_ATIVO INT NULL,
LET_DAT_HIST_CADASTRO DATETIME NULL,
LET_INT_HIST_USU_CADASTRO INT NULL,
LET_DAT_HIST_ALTERADO_EM DATETIME NULL,
LET_DAT_HIST_LIBERADO INT NULL,
CONSTRAINT FK_LETINTHISTUSUCADASTRO_LETRA FOREIGN KEY(LET_INT_HIST_USU_CADASTRO) REFERENCES TB_USUARIO(USU_INT_ID)
)
Alguem sabe o que pode estar acontecendo ?
Obrigado
Discussão (1)
Carregando comentários...