Usuário com melhor resposta
Select dentro de um Exec

Pergunta
-
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.
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;
-
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
-
-
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!
-
-
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?
-
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. -
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
-
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. -