Ich schreibe ein Programm in C#, das einige Auswahlanweisungen unter Verwendung von Parametern ausführt, die an sp_executesql übergeben werden. Ein Problem, mit dem ich beim Testen konfrontiert werde, ist, dass die Werte der Parameter am Ende der Anweisung angegeben werden und nicht explizit angegeben werden, unabhängig davon, ob ich die von SQL Profiler oder von einer Uhr in Visual Studio ausgeführten Befehle erhalte. Zeile in der Abfrage. Zu Testzwecken möchte ich schnell die Parameterwerte für die Parameter ersetzen.Schnelle Möglichkeit, Parameter explizit in einer sp_executesql-Anweisung zu ersetzen?
Anstatt also:
exec sp_executesql N'
SELECT CustomerName
FROM CustomerTable ct WITH(NOLOCK)
WHERE ct.CustomerId <> @CustomerId
AND ct.ItemId <> @ItemId
AND ct.TransactionId = @TransactionId'
,N'@CustomerId bigint,@ItemId nvarchar(1),@TransactionId nvarchar(30), @CustomerId = 3000, @ItemId = N'4', @TransactionId=N'43281'
Ich möchte:
exec sp_executesql N'
SELECT CustomerName
FROM CustomerTable ct WITH(NOLOCK)
WHERE ct.CustomerId = 3000
AND ct.ItemId <> N'4'
AND ct.TransactionId = N'43281''
Bitte nicht zu viel Aufmerksamkeit auf die Syntax des Beispiels bezahlen, da sie gerade verwendet wird, das demonstrieren Konzept. Kennt jemand einen schnellen Weg, dies zu tun? Grundsätzlich möchte ich es zu Testzwecken ersetzen lassen, da es mir leichter macht, Bedingungen zu modifizieren, um zu testen, wie sie die zurückgegebenen Ergebnisse beeinflussen. Ich würde jede Hilfe schätzen, die jeder geben kann. Vielen Dank.
Sie können die Liste der Parameter manuell durchgehen und ihre Werte in die Abfrage einfügen. Andernfalls sind Parameter eine Optimierung, die auf der SQL-Engine-Ebene behandelt wird, und es gibt keine Möglichkeit, die interne Abfrage abzufangen, die SQL zur Verarbeitung verwendet. Können Sie den C# -Code bereitstellen, den Sie verwenden, um den dynamischen SQL-Befehl zu generieren? – mellamokb