Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

acsouza

Uso de variável em select

Recommended Posts

Caros,

 

Estou criando uma trigger para geração de logs (para sistemas C#). A idéia é desenvolve-la de forma genérica onde a mesma possa ser aplicada em qualquer sistema sem muita programação. No entanto, não estou conseguindo fazer com que o sql entenda que uma determinada variável deve ser tratada como um campo de uma tabela. Segue abaixo o código fonte e comentários:

 

 

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

ALTER TRIGGER [DBO].[TRG_INSERIR_LOG] ON tab_lp -- NOME DA TABELA A SER VERIFICADA
FOR INSERT, UPDATE, DELETE

AS

-- DECLARACAO DE VARIAVEIS
DECLARE @LOGIN 			nvarchar(50),
	@ACAO			  varchar(01),
	@DATA			  datetime,
	@TAB_VERIFICADA		nvarchar(50),
	@ID_TAB_VERIFICADA	int,
	@QTD_COLUNAS		int,
	@I			int,
	@TEMP_NOME_COLUNA	nvarchar(50),
	@TEMP_VALOR_COLUNA	nvarchar(50),
	@TEMP			nvarchar(50)


-- POPULANDO VARIAVEIS
SET @I			= 1
SET @TAB_VERIFICADA 	= 'tab_lp' -- NOME DA TABELA A SER VERIFICADA
SET @LOGIN		= (SELECT tmp_login FROM tab_temporario)
SET @ACAO		= (SELECT tmp_acao FROM tab_temporario)
SET @DATA		= (SELECT tmp_data_hora FROM tab_temporario)
SET @ID_TAB_VERIFICADA	= (SELECT id FROM [dbo].[sysobjects] WHERE name = @TAB_VERIFICADA)
SET @QTD_COLUNAS	= (SELECT COUNT(name) FROM [dbo].[syscolumns] WHERE ID = @ID_TAB_VERIFICADA)

DECLARE NOME_COLUNA CURSOR FOR SELECT name FROM syscolumns WHERE id = @ID_TAB_VERIFICADA
OPEN NOME_COLUNA

-- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-- BLOCO PARA INSERT
-- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
IF(@ACAO = 'I')		
BEGIN
	WHILE (@I <= @QTD_COLUNAS)
	BEGIN
		FETCH NEXT FROM NOME_COLUNA INTO @TEMP_NOME_COLUNA		

		-- BLOCO ABAIXO SOBRE ANALISE DE LÓGICA --
		SET @TEMP_VALOR_COLUNA = ([color="#FF0000"]
SELECT @TEMP_NOME_COLUNA FROM inserted[/color]) [i]-- Aqui esta o meu problema, não consigo fazer com que o sql trate a variável @TEMP_NOME_COLUNA COM como um campo[/i]


		SET @I = @I + 1
	END
END

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Preciso de uma maneira de fazer o sql tratar a variável como se fosse um campo da tabela, pois ao invés de trazer o valor existente dentro do campo da tabela ele traz o valor existente dentro da variável (que é o nome do campo). Alguém tem alguma idéia de como resolver essa parada ? Conto com a ajuda de todos.

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é verdade, o problema é que preciso quardar esse valor em uma variável e não sei fazer isso usando o EXECUTE.

neste post tem um exemplo de uso: http://forum.imasters.com.br/index.php?s=&...st&p=579342

 

qq. coisa faça uma adptação e coloque isso em uma function pra facilitar

 

 

t++

http://forum.imasters.com.br/public/style_emoticons/default/natal_wink.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.