2017-01-04 4 views
1

Ich habe Code:SQL - Abfrage als Parameter

DECLARE @sqlQuery NVARCHAR(4000); 
DECLARE @stn NVARCHAR(4000); 
SET @stn=N'SELECT cast(isnull(SUBSTRING(CDN.DokSumT(16,739684,1045,1,32768,1,1,739684,1,2,1,0,78877,0,3,1,1,0,0,0,0,0,-1) , 9 , 7),0) as decimal (28,4))'; 
SELECT @sqlQuery = 'SELECT GIDNumber, Name, @stn as stn FROM Table_342 WHERE Name LIKE ''%ABLE%'''; 
EXEC sp_executesql @sqlQuery, N'@stn NVARCHAR(4000)', @stn; 

Diese Anfrage gibt

enter image description here

In der Spalte "stn" Ich will nicht eine Abfrage ein Abfrage-Ergebnis haben. Wie geht das? Bitte helfen Sie.

+0

Ich muss fragen, obwohl ich vermute, dass die Antworten "Ja" und "keine Ahnung" - ist dies * definitiv * der effizienteste Weg, um das Problem zu lösen haben, und wer hat diese Datenbank entworfen? –

+0

Ich habe keine Ahnung, aber ich denke schon :) – ngLucas

Antwort

2

so etwas wie dies versuchen ....

DECLARE @sqlQuery NVARCHAR(MAX) 
     , @stn  NVARCHAR(MAX) 
     , @stn_R DECIMAL(28,4); 

SET @stn = N'SELECT @stn_R = cast(isnull(SUBSTRING(CDN.DokSumT(16,739684,1045,1,32768,1,1,739684,1,2,1,0,78877,0,3,1,1,0,0,0,0,0,-1) , 9 , 7),0) as decimal (28,4))'; 

EXEC sp_executesql @stn 
       , N'@stn_R DECIMAL(28,4) OUTPUT' 
       , @stn_R OUTPUT 

SELECT @sqlQuery = 'SELECT GIDNumber, Name, @stn_R as stn FROM Table_342 WHERE Name LIKE ''%ABLE%'''; 

EXEC sp_executesql @sqlQuery 
       , N'@stn_R DECIMAL(28,4)' 
       , @stn_R; 

Hinweis

Ihre gesamte Abfrage als Parameter behandelt wird, weil sp_executesql nur erste Parameter eine SQL-Anweisung alle folgenden Parameter erwartet sind entweder variabel Deklarationen oder Variablenwerte.

Sie müssen die Ausführung der dynamischen Abfrage in zwei Teile aufteilen und Ausgabeparameter verwenden, um den Wert aus der ersten Abfrage abzurufen und an die zweite Abfrage zu übergeben.

+0

Ich habe diesen Fehler Msg 137, Level 15, State 2, Line 1 Muss die Skalarvariable "@stan" deklarieren. – ngLucas

1

Versuchen Sie zuerst mit nicht dynamischer Art und Weise. Sobald Sie..Execute dynamisch mit EXEC (@sqlquery)