Ich habe mich gefragt, ob es in MS SQL Server 2005 eine Möglichkeit gibt, dies zu tun:
DECLARE @theDate varchar(60)
SET @theDate = '''2010-01-01'' AND ''2010-08-31 23:59:59'''
SELECT AdministratorCode,
SUM(Total) as theTotal,
SUM(WOD.Quantity) as theQty,
AVG(Total) as avgTotal,
(SELECT SUM(tblWOD.Amount)
FROM tblWOD
JOIN tblWO on tblWOD.OrderID = tblWO.ID
WHERE tblWO.Approved = '1'
AND tblWO.AdministratorCode = tblWO.AdministratorCode
AND tblWO.OrderDate BETWEEN @theDate
)
... etc
Ist das möglich?
sql
sql-server
sql-server-2005
tsql
dynamic-sql
StealthRT
quelle
quelle
Antworten:
Es ist möglich, erfordert jedoch die Verwendung von dynamischem SQL.
Ich empfehle, den Fluch und den Segen von dynamischem SQL zu lesen, bevor Sie fortfahren ...
Dynamisches SQL ist nur eine SQL-Anweisung, die vor der Ausführung als Zeichenfolge zusammengesetzt wird. Es tritt also die übliche Verkettung von Zeichenfolgen auf. Dynamisches SQL ist immer dann erforderlich, wenn Sie etwas in der SQL-Syntax ausführen möchten, das nicht zulässig ist, z.
EXEC sp_executesql
Ermöglicht die Verwendung von Bindungs- / PreparatedStatement-Parametern, sodass Sie sich bei SQL-Injection-Angriffen nicht darum kümmern müssen, einfache Anführungszeichen / etc zu vermeiden.quelle
Ändern Sie dann Ihre Abfrage, um diese Logik zu verwenden:
quelle
Verwenden von EXEC
Sie können das folgende Beispiel zum Erstellen einer SQL-Anweisung verwenden.
Verwenden von sp_executesql
Mit diesem Ansatz können Sie sicherstellen, dass die an die Abfrage übergebenen Datenwerte die richtigen Datentypen sind, und die Verwendung weiterer Anführungszeichen vermeiden.
Referenz
quelle
Ich werde darauf hinweisen, dass der Autor in dem Artikel, der in der am besten bewerteten Antwort The Curse and Blessings of Dynamic SQL verlinkt ist, angibt, dass die Antwort nicht darin besteht, Dynamic SQL zu verwenden. Scrollen Sie fast bis zum Ende, um dies zu sehen.
Aus dem Artikel: "Die richtige Methode besteht darin, die Liste in eine Tabelle mit einer benutzerdefinierten Funktion oder einer gespeicherten Prozedur zu entpacken."
Sobald sich die Liste in einer Tabelle befindet, können Sie natürlich einen Join verwenden. Ich konnte die am besten bewertete Antwort nicht direkt kommentieren, daher habe ich diesen Kommentar hinzugefügt.
quelle