Boa Tarde, comecei a trabalhar agora com TRIGGERS, e estou com um problema:

Tenho duas tabelas bem simples:

CREATE TABLE [dbo].[USUARIOS_PADRAO](
[CODIGO] [int] IDENTITY(1,1) NOT NULL,
[NOME] [varchar](50) NULL,
[DESCRICAO] [varchar](60) NULL,
[DATA_ADD] [datetime] NULL,
[USER_ADD] [varchar](50) NULL,
[xSTATUS] [varchar](2) NULL,
CONSTRAINT [PK_USUARIOS_PADRAO] PRIMARY KEY CLUSTERED
(
[CODIGO] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[USUARIOS_INTEGRA](
[INTEG_CODIGO] [int] IDENTITY(1,1) NOT NULL,
[INTEG_NOME] [varchar](50) NULL,
[INTEG_DESCRICAO] [varchar](60) NULL,
[INTEG_DATA_ADD] [datetime] NULL,
[INTEG_USER_ADD] [varchar](50) NULL,
[PADRAO_CODIGO] [int] NULL,
CONSTRAINT [PK_USUARIOS_INTEGRA] PRIMARY KEY CLUSTERED
(
[INTEG_CODIGO] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

Minha TRIGGER  pega os dados da Tabela USUARIOS_PADRAO e copia para a tabela

USUARIOS_INTEGRA quando o campo xSTATUS da tabela USUARIOS_PADRAO  é alterado para P.

Se tentar alterar apenas um Registro a trigger funciona, porém se for tentar alterar varios registros, da o Erro :

A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue um =, !=, <, <= , >, >= ou quando ela é usada como uma expressão.
A instrução foi finalizada.

Segue a TRIGGER:

CREATE TRIGGER [dbo].[INCLUI_USUARIOINTEGRA]
ON [dbo].[USUARIOS_PADRAO]
AFTER UPDATE
AS

IF (SELECT xSTATUS FROM inserted) = 'P'

BEGIN

INSERT INTO USUARIOS_INTEGRA(PADRAO_CODIGO, INTEG_NOME, INTEG_DESCRICAO, INTEG_DATA_ADD,INTEG_USER_ADD)
SELECT CODIGO, NOME, DESCRICAO, DATA_ADD, USER_ADD FROM USUARIOS_PADRAO WHERE NOT EXISTS
(SELECT * FROM USUARIOS_INTEGRA WHERE USUARIOS_PADRAO.CODIGO = USUARIOS_INTEGRA.PADRAO_CODIGO)


END

Grato pela Ajuda =D

Exibições: 201

Respostas a este tópico

Consegui resolver meu problema.

O Erro estava na linha " IF (SELECT xSTATUS FROM inserted) = 'P' ". Era ela que estava retornando mais de um valor. Modifiquei colocando a codição xSTATUS = P no Where do Select de Inclusão.

RSS

© 2017   Criado por Ramon Durães.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço