2016-05-20 7 views
1

Ich habe eine Tabelle, die SQL-Abfragen speichert. Ich lese das und führe es unter Verwendung EXECUTE sp_executesql aus. Ich frage mich, ob, wenn ich diese Abfrage ändern möchte, wie kann ich das tun?So ändern Sie dynamische Abfrage in SQL Server?

Wenn ich eine Variable am Ende hinzufügen, kann ich so etwas tun:

DECLARE @sql1 NVARCHAR(MAX), @var NVARCHAR(20) 

SET @sql1 = (SELECT Query FROM Table WHERE ID = 123) 
SET @var = ' AND CONDITION2' 

PRINT @sql1 + @var 

Ergebnis:

UPDATE Table SET VALUE1 WHERE CONDITION1 AND CONDITION2 

Aber wenn ich etwas dazwischen hinzufügen wollen, ich Ich bin mir nicht sicher, wie ich das machen soll.

Abfrage:

DECLARE @sql NVARCHAR(MAX) 
SET @sql = (SELECT Query FROM Table WHERE ID = 123) 
PRINT @sql 

Tatsächliches Ergebnis:

UPDATE Table SET VALUE1 WHERE CONDITION1 

Erwartet:

UPDATE TOP (100) Table SET VALUE1 WHERE CONDITION1 
+0

Ohne ein tatsächlichen Details sonst niemand wollen wissen, wie dies entweder zu tun. Vor allem, weil wir keine Ahnung haben, was Sie zu tun versuchen. Sie sollten mit Tabellendefinitionen und Beispieldaten beginnen. Dann schließe ein, was du zu tun versuchst. –

Antwort

3

einfach Ihre ursprüngliche Abfrage ändern ein Platzhalter

SET @sql = 'UPDATE {0} Table SET VALUE1 WHERE CONDITION1'; 
SET @top_condition = 'TOP(100)'; 
SET @sql = REPLACE(@sql, 
        '{0}', 
        CONVERT(varchar(max), @top_condition) 
        ); 
enthalten auch

Sie können die Top-Option entfernen, wenn Sie es

SET @top_condition = ''; 
+0

Das ist genau das, was ich wollte. – CSharper