Olá.
Primeiramente, este é um post puramente sobre tsql e SQL Server.
Preciso construir uma tabela com uma chave primária especial. Segue o código da tabela:
CREATE TABLE [dbo].[pessoa](
[id] [char](7) NOT NULL PRIMARY KEY,
[nome] [varchar](20) NOT NULL,
[cidade] [varchar](20) NOT NULL,
[idade] [tinyint] NOT NULL,
[cont] [int] IDENTITY(1,1) NOT NULL
)
A primary key (id) será gerada da seguinte forma: primeira letra do nome + primeira letra da cidade + idade + número identity (cont). Por exemplo, quando eu inserir (‘eduardo’, ‘araraquara’, 19) o id será ‘ea191’. Quando eu inserir um segundo registro (‘guj’, ‘java’, 20) será ‘gj202’, e por aí vai.
Nunca trabalhei com triggers. Procurando na net, descobri que isso pode ser feito com uma. Cheguei a fazer, segue o código:
[code]CREATE TRIGGER tr_insert
ON pessoa
INSTEAD OF INSERT
AS
BEGIN
DECLARE @id char(7), @nome varchar(20), @cidade varchar(20), @idade tinyint, @cont int
SET @nome = (SELECT nome FROM inserted)
SET @cidade = (SELECT cidade FROM inserted)
SET @idade = (SELECT idade FROM inserted)
SET @cont = (SELECT cont FROM inserted)
SET @id = substring(@nome, 1, 1) + substring(@cidade, 1, 1) + cast(@idade as varchar) + cast(@cont as varchar)
INSERT INTO teste (id, nome, cidade, idade) VALUES(@id, @nome, @cidade, @idade)
END
GO [/code]
Deu quase certo. Quando eu insiro os registros acima na tabela, ele gera os seguintes IDs: ‘ea190’, ‘gj00’. Ou seja, o comando (SELECT cont FROM inserted) está me retornando 0. Isso significa que o identity é gerado depois do insert.
Alguém sabe uma forma de resolver este problema? Lembrando que não manjo de trigger, então se tiver fazendo algo de errado por favor me corrijam. Agradeço desde já.