Ir para conteúdo

POWERED BY:

Arquivado

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

Progr'amador

Function

Recommended Posts

Olá,

 

é possivel criar uma Function tipo:

CREATE FUNCTION FN_TESTE(@tabela varchar(50), @campo varchar(35))RETURNS intASBEGIN   SELECT Max( @Campo ) AS idvalue INTO RETURN   FROM @tabela ENDGO
...colocando as variaveis dentro da select, pra que possa ser usada com qualquer tabela

 

execultando:

DBO.FN_TESTE(MINHA_TABELA, NOME_CAMPO) --- usando sempre um campo do tipo INT (inteiro)

----------------

100

 

Abs. Progr'amador.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Camarada,

 

Com function não é possível pois pra montar um sql dinaminco você precisa utilizar o EXEC assim:

CREATE FUNCTION FN_TESTE(@tabela varchar(50), @campo varchar(35))RETURNS intASBEGIN		DECLARE @COMANDO VARCHAR(4000), @RET AS INT   SET @COMANDO = 'SELECT Max(' + LTRIM(RTRIM(@Campo )) + ') AS idvalue FROM ' +  LTRIM(RTRIM(@tabela))   EXEC(@COMANDO)ENDGO

Porém não é permitido utilzar EXEC em funtion´s pelo que vi.

 

Com stored procedure rola! Da seguinte forma:

ALTER PROC FN_TESTE	@TABELA VARCHAR(100), 	@CAMPO VARCHAR(100)ASBEGIN	DECLARE @COMANDO VARCHAR(4000)  SET @COMANDO = 'SELECT MAX(' + @CAMPO + ') AS IDVALUE FROM ' + @TABELA    EXEC(@COMANDO)ENDGO

Para rodar:

FN_TESTE 'TB_PLANEJAMENTO','NU_PLANEJAMENTO'

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

ae tu pode jogar numa tabela virtual global e pegar o retorno pela PROC, nesse caso nem precisa de output pq. a proc por padrão ja retorna um valor int, e não esquecer de apagar a tabela virtual global

 

muda a proc para isso

ALTER PROC FN_TESTE	@TABELA VARCHAR(100),	@CAMPO VARCHAR(100)ASBEGIN  DECLARE @COMANDO VARCHAR(4000)  SET @COMANDO = 'SELECT MAX(' + @CAMPO + ') AS IDVALUE INTO ##TAB FROM ' + @TABELA    EXEC(@COMANDO)  DECLARE @RETORNO INT  SELECT @RETORNO = IDVALUE FROM ##TAB  DROP TABLE ##TAB  RETURN @RETORNO	ENDGO

e pra chamar a proc

DECLARE @RETORNO INTEXEC @RETORNO = FN_TESTE 'FrForuns','ID'SELECT @RETORNO

OBS.: se o retorno do max não for INT dai tu vai ter que fazer um output, pq. esse retorno padrão da proc só é aceito INT

 

 

que a força esteja com você

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.