Algum tempo atrás foi publicado um post sobre Coluna Calculada SQL Server , recentemente perguntaram, como fazer uma coluna calculada usando um campo de outra tabela.

Com isso surgiu a oportunidade de escrever um novo post, Coluna calculada com campo de outra tabela no SQL Server, vamos ao exemplo.

Primeiramente será criada as tabelas utilizadas no exemplo, são tabelas simples, sem preocupação de performance e chaves.

CREATE TABLE T_CAMPOCALCULADO
(
	NOME VARCHAR(100),
	SOBRENOME VARCHAR(100)
);

CREATE TABLE T_ENDERECO
(
	CODIGO INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
	ENDERECO VARCHAR(100) NULL
);

Tabelas criadas, agora será adicionado um campo na tabela ‘T_CAMPOCALCULADO‘ que fará o relacionamento entre ambas tabelas.

ALTER TABLE T_CAMPOCALCULADO ADD CODIGOENDERECO INT, FOREIGN KEY(CODIGOENDERECO) REFERENCES T_ENDERECO(CODIGO);

A forma utilizada nesse post para retornar um campo calculado de uma segunda tabela foi a criação de uma função que recebe por parâmetro o código que deve-se realizar o filtro, veja o exemplo:

CREATE FUNCTION F_CAMPO_CALCULADO (@V_CODIGOENDERECO INT)
RETURNS VARCHAR(100)
BEGIN
	DECLARE @V_ENDERECO VARCHAR(100);

	SET @V_ENDERECO = '';

	SELECT @V_ENDERECO = CAST(E.CODIGO AS VARCHAR(50)) + ' - ' + E.ENDERECO 
	FROM T_ENDERECO E
	WHERE CODIGO = @V_CODIGOENDERECO; 

	RETURN @V_ENDERECO
END;

Após criar a função, basta adicionar na tabela ‘T_CAMPOCALCULADO‘ o campo calculado baseado na função que foi criada, veja o exemplo:

ALTER TABLE T_CAMPOCALCULADO ADD ENDERECO AS DBO.F_CAMPO_CALCULADO(CODIGOENDERECO);

Insira informações nas tabelas para que possa ser visto o resultado.

INSERT INTO T_ENDERECO (ENDERECO) VALUES ('RUA 1');
INSERT INTO T_ENDERECO (ENDERECO) VALUES ('RUA 2');
INSERT INTO T_ENDERECO (ENDERECO) VALUES ('RUA 3');
INSERT INTO T_ENDERECO (ENDERECO) VALUES ('RUA 4');
INSERT INTO T_ENDERECO (ENDERECO) VALUES ('RUA 5');
INSERT INTO T_ENDERECO (ENDERECO) VALUES ('RUA 6');
INSERT INTO T_ENDERECO (ENDERECO) VALUES ('RUA 7');

INSERT INTO T_CAMPOCALCULADO (NOME, SOBRENOME, CODIGOENDERECO) VALUES ('NOME 1', 'SOBRENONE 1', 2)

Após realizar os inserts, pode-se fazer o select na tabela que possui o campo calculado para que possa ser visto o resultado.

SELECT * 
FROM T_CAMPOCALCULADO

 

ColunaCalculada

Deve-se levar em consideração que, para cada registro da tabela ‘T_CAMPOCALCULADO‘ será disparada a função para retornar o campo calculado, com isso, deve-se avaliar se realmente vale a pena.


0 comentário

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *