Usuário com melhor resposta
Select dentro de um Exec

Pergunta
-
Bom dia a todos,
Queria saber se posso consigo colocar um select dentro um Exec ou se existe alguma outra maneira para se usar uma procedure junto com um comando qualquer.
At's!
sexta-feira, 14 de março de 2008 14:22
Respostas
-
Abdul,
Minha sugestão para o parametro ('SELECT ID FROM TABELA WHERE ORDEM = 2') , seria primeiro obter esse valor e depois passar para a execução da procedure.Além disso, seria melhor passar a data no formato yyy/mm/dd para evitar problemas na troca do mês pelo dia e também notei que os valores estão com separador (,) e substituir por (.).
Espero ter ajudado!
Code Snippetdeclare
@Id int;set
@Id = (SELECT ID FROM TABELA WHERE ORDEM = 2);EXECUTE
NOME_DA_PROCEDURE '2003/07/02', @Id, '100.000000000', '10057133.73',1 ,1Ajude a melhorar o nosso Fórum!
Não esqueça de marca a mensagem como "útil", caso tenha ajudado.sábado, 15 de março de 2008 11:50
Todas as Respostas
-
consegue sim e so colocar entre ()
exemplo
exec ('select campo from tabela' )
pode ser uma variavel tambem
ou vc. pode usar a sp_executesql esta opcao e melhor pois o plano de execucao podera ser usado caso ja tenha uma compilacao em cache, veja no books on line a referencia qualquer coisa retorne,.
abs;
sexta-feira, 14 de março de 2008 14:28 -
Olá Abdul,
Se a idéia é gerar comandos dinamicamente a sugestão do Colla já é suficiente. Se a idéia é obter o resultado da SP para possivelmente fazer um JOIN com um SELECT não será possível fazer diretamente. O comando abaixo não é válido no SQL Server:
Code SnippetSELECT * FROM EXEC SuaProcedureSe for esse o seu desejo, você terá que criar uma tabela temporária, gravar o resultado da SP e fazer um JOIN da SP com outras tabelas. Ex:
Code SnippetCREATE
TABLE #tblTeste (CODIGO INT, NOME VARCHAR(200))INSERT
INTO #tblTeste EXEC uspRecuperaNomesSELECT
* FROM #tblTeste JOIN <Outras Tabelas>[ ]s,
Gustavo
sexta-feira, 14 de março de 2008 14:33 -
so como complmento se a for essa a ideia eu sugiro dar uma olhada nas funcoes que retornem uma tabela.
Abs/
sexta-feira, 14 de março de 2008 14:42 -
Ola galera,
Fico muito grato com a ajuda de todos, mas não sei o que estou fazendo de errado, mas não estou conseguindo fazer, segue a query que estou tentando executar:
EXEC
PROCEDURE '02/07/2003',(
'SELECT ID FROM TABELA WHERE ORDEM = 2') as ORDEM, '100,000000000', '10057133,73', 1 ,1At's!
sexta-feira, 14 de março de 2008 15:13 -
Olá Abdul,
Não entendi a lógica dessa query. Você poderia descrever o que você espera que ela retorne ?
[ ]s,
Gustavo
sexta-feira, 14 de março de 2008 15:22 -
Ola Gustavo,
Eu preciso fazer o seguinte:
É executar uma procedure de Insert e no meio do caminho eu preciso de um ID, e eu preciso de um select para obter ele, entendeu?
Por que eu faço assim, e não direto na procedure???
Por que estou migrando um banco em access para sql, e os campos do tabela do banco em sql estão todos reestruturados, ou seja, não foi um ctrl+c e ctrl+v..rsrs..então estou tendo que gerar os inserts no excel e colocando na query do sql, e nisso eu executo uma procedure de insert pegando esses valores do access e um desses valores é um id que eu vo usar em select, que vai me retornar um outro id para colocar no insert da procedure.
Entendeu?
sexta-feira, 14 de março de 2008 15:34 -
Abdul,
Minha sugestão para o parametro ('SELECT ID FROM TABELA WHERE ORDEM = 2') , seria primeiro obter esse valor e depois passar para a execução da procedure.Além disso, seria melhor passar a data no formato yyy/mm/dd para evitar problemas na troca do mês pelo dia e também notei que os valores estão com separador (,) e substituir por (.).
Espero ter ajudado!
Code Snippetdeclare
@Id int;set
@Id = (SELECT ID FROM TABELA WHERE ORDEM = 2);EXECUTE
NOME_DA_PROCEDURE '2003/07/02', @Id, '100.000000000', '10057133.73',1 ,1Ajude a melhorar o nosso Fórum!
Não esqueça de marca a mensagem como "útil", caso tenha ajudado.sábado, 15 de março de 2008 11:50 -
Bom dia Laercio,
Show de bola, até certo modo funcionou, mas chega um momento que da um erro ao converter o valor para numeric, e eu fiz alguns testes e percebi que o campo é maior do que o suportado. Mas eu não entendi uma coisa, o campo esta como numeric(20,10) e valor inserido é menor que isso (veja valor abaixo), se a precisão do tipo do campo é gigantesca por que um valor tão pequeno da esse erro?
Code SnippetEXEC PROCEDURE '08/06/2004', 1, N'12312159028' , N'225444312.1', 1, 1
segunda-feira, 17 de março de 2008 13:06 -
Opa!
Abdul,
Esse problema está ocorrendo pq a "parte inteira" do campo numeric(20,10) possui apenas 10 casas na parte inteira e o valor 12312159028 possui 11 casas.
Vc definiu um campo numeric(20,10) com 20 posições sendo que 10 foram destinadas para a parte decimal. E neste caso será necessário rever o tamanho deste campo (ou diminui o numero de casas decimais ou aumenta na parte inteira).
Ajude a melhorar o nosso Fórum!
Não esqueça de marca a mensagem como "útil", caso tenha ajudado.segunda-feira, 17 de março de 2008 13:40 -
Ola Laercio,
valeu, usei o tipo money, por que além de ser mais leve, eu não preciso limitar o tamanho dele.
segunda-feira, 17 de março de 2008 15:48