2017-11-15 4 views
0
exec Befehl verbergen

WHILE @nxt < @rc BEGIN set @sql = (select Rec from DmsRec where [email protected]) use TestDB1 exec (@sql) select @rc_child = @@ROWCOUNT use MyTempDB if @rc_child = 0 begin insert into DMSResults select DOCID from DmsRec where [email protected] end set @nxt = @nxt + 1 END, wie ich die Anzeige Ergebnis

Meine Frage ist, wie ich Anzeige Ergebnis exec Befehl ausblenden. (mit Sql Server 2008r2) Die obige Abfrage ist ein kleiner Teil der gesamten Prozedur.

Zugriff auf mehrere Bedingungen, Wert und mehrere Datenbanken I eine select-Anweisung zu generieren und gespeichert in Rec Feld in Tabelle DmsRec

Nach dem Erzeugen erfordern Select .... Anweisung ich es in Tabelle DmsRec gespeichert. z.B. SELECT ACCD FROM M_TABLE WHERE 1=1 and ACCD='0034422'.

Diese Select-Anweisung, die als Wert in der Tabelle DmsRec gespeichert ist, möchte in einer anderen Datenbank ausgeführt werden.

So habe ich use Befehl verwendet und ändern Sie den Namen der Datenbank, Zugriff auf das Recordset. Wenn die ausgeführte sql (0 Zeile zurückgeben) dann führen Sie den insert Befehl, der in anderen Datenbank ausgeführt wird. Hiermit habe ich erfahren ob docid in DMSResults ist jene tranaction, deren Master nicht vaalialbel ist.

Es funktioniert perfekt, kann aber nicht anzeigen Datensätze von Exec-Befehl ausblenden.

Ich laufe exec(@sql) ist nur zu überprüfen, ob es irgendeine Zeile zurückgibt oder nicht. und gespeicherten rowcount Wert in Variable.

Aber keine Datensätze im Raster angezeigt werden (gleichzeitig Ergebnis {ausgeführte Zeilen} sollte in Variable gespeichert werden).

Ohne Optionen in SSMS manuell dh Extras/Optionen, Abfrageergebnisse/SQL Server/Ergebnisse zu XX, überprüfen Sie "Verwerfen Ergebnisse nach Abfrage ausführt"

+0

Set –

+0

No Sir nocount aus, dass ich schon gegeben .... aber exec (@sql) Datensätze Ergebnis Pan Gitter angezeigt wird. Ich möchte nur z. B. eine Nachricht anzeigen. (1 Reihe (n) betroffen) aber nicht Ergebnis. –

Antwort

0

EDIT verändert sich - basierend auf Kommentaren unten

können Sie Verwenden Sie sp_executesql und übergeben Sie Parameter, auch OUTPUT-Parameter.

Hier ist ein Beispiel - Sie ändern, müssen die SQL-Abfrage Sie speichern leicht

DECLARE @SQL NVARCHAR(MAX), @Rows INT, @nxt INT = 1 
CREATE TABLE DmsRec (row INT, rec NVARCHAR(10)) 
INSERT INTO DmsRec(row, rec) 
    VALUES(1, 1) 

SET @SQL = 'IF EXISTS (SELECT rec FROM dbo.DmsRec WHERE row = @nxt) SET @Rows = 1 ELSE SET @Rows = 0' --+'; SELECT @Rows = @@ROWCOUNT' 
EXEC sys.sp_executesql @sql, N'@nxt INT, @Rows INT OUTPUT', @nxt, @Rows OUTPUT; 
SELECT @Rows 

enter image description here

SET @nxt = 0 -- record doesn't exist 
SET @SQL = 'IF EXISTS (SELECT rec FROM dbo.DmsRec WHERE row = @nxt) SET @Rows = 1 ELSE SET @Rows = 0' 

EXEC sys.sp_executesql @sql, N'@nxt INT, @Rows INT OUTPUT', @nxt, @Rows OUTPUT; 
SELECT @Rows 

enter image description here

Sie dann @Rows Variable verwenden, um festzustellen, ob Sie einen neuen Datensatz einfügen müssen oder nicht.

If @Rows = 1 
BEGIN 
    --INSERT record 
END 
+0

Pls. lesen Sie in Hauptpost. field * Rec 'mit Wert wie' INDIA ',' UK ',' US 'gibt es SQL-Query-Text gespeichert (siehe in der Post). Und jede Zeile ist anders sql (es können auch verschiedene Spalten sein).So kann ich nicht einfach Declare @rows Tabelle (Rec INT) verwenden, gibt es einen Fehler "Spalte Name .... stimmt nicht überein" –

+0

Und alles, was Sie nach jeder Ausführung suchen, ist, ob die Zeile nicht existieren und wenn ja, einen neuen Datensatz einfügen, ja? –

+0

YES !, auch die Überprüfung ist in einer anderen Datenbank und das Einfügen von Werten in der Tabelle DmsResult befindet sich in einer anderen Datenbank. –

Verwandte Themen