Ir para conteúdo

Arquivado

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

birobirosk8

Função ou Procedure !!!

Recommended Posts

Oi gente, minha primeira participação aki no SQL Server...1. estou querendo fazer uma (Função, Procedure seila) que eu endie o "Nome da Cidade" e ela pesquise no banco para ver se ja existe, se ja existe então me retornaria o "codigo do cidade", e senão existir o cadastraria e me retornaria o "codigo da cidade".2. Gostaria de fazer o seguinte usando essa função acima, nem sei se da.Tipo queria enviar do meu programa todos os dados para cadastrar o cliente, inclusive o nome da cidade, ai queria utilizar essa função dentro da procedure para ela me retorna o codigo da cidade.obrigado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

função seria se você for usar este código em varios lugares, se for somente no cadastramento de clientes acho q seria melhor deixar em procedure msm.... mas neste caso qq. uma das duas seria tranquilo

Compartilhar este post


Link para o post
Compartilhar em outros sites

ah sim, obrigado, mais usariei em mais de um lugar sim...Vélhão, eu comecei a tentar aprender T-SQL ontem, num tem como você me passar um exemplo sei la, a procedure de inserção dos dados do "Cliente" eu ja criei.A Procedure irá receber o "Nome da Cidade"Agora queria saber como fazer a tal "Fução" para usar dentro da Procedure q eu passe o "Nome da Cidade" e ela me retorne o "Codigo da Cidade"obrigaaaado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

para criar a função

CREATE FUNCTION F_CIDADE (@CIDNOME VARCHAR(100))RETURNS INT --define o tipo de retornoASBEGIN	--aqui denttro vai as verificações	DECLARE @CODCID INT	SET @CODCID = NULL	SELECT @CODCID = CODCID FROM CIDADE WHERE CIDNOME = @CIDNOME 	IF @CODCID IS NULL	BEGIN		 --inseri a cidade e recupera o codigo da cidade	END 	--aqui retorna o codigo da cidade	RETURN @CODCID END

para acionar a função dentro da procedure

declare @teste intselect @teste as [antes]--chama a função passando o nome da cidade como parametroset @teste = [seubanco].[dbo].[F_CIDADE ]('Sao Paulo')select @teste as [depois]

falows

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa, brigadão...

fiz desta forma:

 

CREATE FUNCTION udf_VeriCidade (@nomeCidade varchar(50), @codEstado int)RETURNS INT --define o tipo de retornoASBEGIN		--aqui denttro vai as verificações		DECLARE @CodCidade INT		SET @CodCidade = NULL		SELECT @CodCidade = No_Codigo FROM TB_Cidades WHERE Text_Nome = @nomeCidade    	 IF @CodCidade IS NULL	BEGIN		INSERT INTO TB_Cidades (Text_Nome, No_CodEstado)		VALUES (@nomeCidade, @codEstado)		SELECT @CodCidade = No_Codigo FROM TB_Cidades WHERE Text_Nome = @nomeCidade    	 END 	 --aqui retorna o codigo da cidade	RETURN @CodCidade END

Mais na hora q dou um check sintaxe aparece a seguinte mensagem:

"invalid use of 'INSERT' within a function"

 

quando eu estava tentando fazer antes tava aparecendo isso tamber, mais ao inves de INSERT era o SELECT.

 

falooow, obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

foi mals ai hein... pode crer não tinha testado aqui antes, testei agora e naum aceitou mesmo.... no booksonline fala que função só executa os comandos INSERT, UPDATE e DELETE em variaveis table locais:

 

INSERT, UPDATE, and DELETE statements modifying table variables local to the function.

 

só com o SELECT funciona...

 

infelizmente neste caso só podera retornar mesmo se a cidade existe ou naum... ou trocar a parte do insert por uma procedure de inserção de cidades que retorne o codigo de cidade, ou ainda trocar toda a função por uma procedure que retorne o codigo da cidade, qualquer coisa veja este topico sobre retorno de valores em procedures: http://forum.imasters.com.br/index.php?showtopic=154967

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aaah, entendi, só SELECT funciona em fun~~oes neh, q ziiinka hehehe.Mais vai vendo, será q eu consigo cria assim:Criar uma Procedure para inserção de clientes, onde eu pegue o "NomeDaCidade", e chame uma outra procedure dentro desta q verifica e me retorna o Codigo ???Ou é mais gacil colocar tudo dentro de uma só procedure e sempre q eu for utilizar do um ctrl-C + ctrlV no codigo ???aaah, mais uma coisinha, como eu faço, + o - para pegar o valor q a procedure retorna no meu programa ?falow brigadão hein, vou ler o topico...

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa, eriva, beleza ???então, vou perguntar nesse topico mesmo para n~çao fikar abrindo varios(pq minha duvidas são bastante hahaha)Eu queria fazer o seguinte, no meu banco tenho uma tabela para Clientes e outra para Agencias, queria fazer algo q verificasse se quando eu for inserri ou alterar o CNPJ verificasse se ele ja existe em alguma das duas tabelas, se sim me retornaria um erro.Se possivel esse erro em forma de String ou um numero q eu determino, para mim poder enviar a msg de rro um pouko mais detalhada para o usuário, tipo "cnpj ja existente"valeeew, muito obrigado....

Compartilhar este post


Link para o post
Compartilhar em outros sites

falai biro blzeraneste caso como alternativas poderia usar uma procedure com return para voltar um numero de erro ou usar parametros de output da procedure como char para retornar a mensagem, naquele tópico descrito acima tem exemplos dos dois tipos de retornofalowst+

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.