Domanda

Ho bisogno di fare una SELECT con una chiamata di stored procedure nella clausola WHERE.Dovrebbe essere qualcosa di simile....

SELECT distinct top 10.x, d.droit DA v_droit d, v_info ho DOVE d.nomdroit='aa' E io.id<>2 E (selezionare da val (exec up_droits(io.x, d.droit)) <>3

Ma non funziona...Qualche idea?

Non dico di sostituire la stored procedure con una funzione perché non è possibile utilizzare il codice esistente in una funzione.In modo che la funzione non è un'opzione valida.Ho davvero bisogno di essere in grado di utilizzare una stored procedure

È stato utile?

Soluzione

Questo risultato è ottenuto dalla prima esecuzione della stored procedure, catturare l'output in una tabella #temp o @tabel variabile, quindi esegue la query contro il tavolo.Qualcosa di simile a questo:

declare @droits_table (val ,... );
insert into @droits_table
exec up_droits(param, param);
SELECT distinct top 10 i.x, d.droit FROM v_droit d, v_info i WHERE d.nomdroit='yy' AND i.id<>2 AND (select val from @droits) <>3

Naturalmente, questo non funziona per voi, perché il up_droits esigenze l'ho.x) e d).droit parametri della query.Questo indica che la stored procedure dovrebbe probabilmente essere una vista o una funzione con valori di tabella.

Altri suggerimenti

Scusa ma, ne fanno un funzione con valori di tabella piuttosto che stored procedure.

Ad esempio:

Scalar - SELECT id, name FROM test WHERE id < (SELECT dbo.mytestfunction())
Table - SELECT id, name FROM test WHERE id = (SELECT col1 from dbo.mytestfunction())

Non si può.Il contenuto della clausola WHERE deve essere un espressione di ricerca.

È la ragione per cui il codice non funziona come una funzione a causa della modifica dei dati?Se è così, allora siete fuori di fortuna, funzioni utilizzate nelle cui clausole devono essere immutabili.

Se la stored procedure non modificare qualsiasi informazione, potrebbe essere in grado di avvolgere all'interno di una funzione.

Se siete su SQL Server non credo che si può fare ciò che si propone.

Ma una cosa che si può fare è costruire query dinamiche, ma attenzione a farlo perché aprono molte interessanti problemareas.

La sintassi è :

EXEC @<query>

Ma anotherthing si può fare, che è probabilmente molto meglio per voi, è quello di rendere il up_droits funzione di fornire i risultati in una tabella temporanea, se si seleziona un #tabella temporanea per la durata della funzione/procedura ambito


declare procedure up_droits() as
select val .. into #temp

Così che cosa dovete fare è creare una procedura


create procedure Top10FromDroit
begin
  exec up_droits
  SELECT distinct top 10 i.x, d.droit FROM v_droit d, v_info i WHERE d.nomdroit='yy' AND i.id2 AND (select val from (#temp) 3

Speriamo che vi darà i risultati che si desidera raggiungere.

Se in un primo momento non si riesce, codice intorno^^

Potrebbe qualcuno di voi a spiegare le ragioni per l'esecuzione di SQl dinamico all'interno di una stored procedure.Conosco molto poche situazioni in cui hai bisogno di loro - ma veramente molto pochi.Il 99,9% (o 999 1000) di eseguire le stringhe possono essere riscritte come normali istruzioni sql con parametri.

Lo stesso è con Seleziona che hanno funzioni all'interno di selezionare o dove clausole.

Provate a pensare al vostro set di dati, non si tratta procedurali modi per risolverlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top