locked
Select dentro de um Exec RRS feed

  • 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 Snippet

    declare @Id int;

    set @Id = (SELECT ID FROM TABELA WHERE ORDEM = 2);

     

    EXECUTE NOME_DA_PROCEDURE '2003/07/02', @Id, '100.000000000', '10057133.73',1 ,1

     

     

    Ajude 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 Snippet
    SELECT
    * FROM EXEC SuaProcedure

     

     

    Se 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 Snippet

    CREATE TABLE #tblTeste (CODIGO INT, NOME VARCHAR(200))

    INSERT INTO #tblTeste EXEC uspRecuperaNomes

    SELECT * 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 ,1

     

     

    At'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 Snippet

    declare @Id int;

    set @Id = (SELECT ID FROM TABELA WHERE ORDEM = 2);

     

    EXECUTE NOME_DA_PROCEDURE '2003/07/02', @Id, '100.000000000', '10057133.73',1 ,1

     

     

    Ajude 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 Snippet

    EXEC PROCEDURE  '08/06/2004', 1, N'12312159028' , N'225444312.1', 1, 1

     

     

    At's!
    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