Sql-Server: SQL Statement als String mit Variablen und IN-Klausel auswerten
Der nachfolgende Artikel beschreibt die Auswertung und Interaktion mit einem in einem String vorliegenden SQL-Statement. Dabei wird die Tupelmenge mit einer kommaseparierten Liste von Ids eingeschränkt (IN-Klausel). Weiterhin wird eine im Statement initialisierte Variable ausgewertet.
SQL
SELECT @sqlStmt = 'SELECT @selectedCount = COUNT(artikelId)
FROM ARTIKELTABLE
WHERE rubrikId IN ('+@rubrikIdList+') ';
Eine Lösung des Problems ist im nachfolgenden Sourcecode angegeben. In diesem Beispiel wird die Artikelanzahl für die in der kommaseparierten Liste angegebenen Rubriken ermittelt.
SQL
-- Variablen deklarieren
DECLARE @sqlStmt NVARCHAR(2000);
DECLARE @paramDef NVARCHAR(500);
DECLARE @rubrikIdList VARCHAR(20);
DECLARE @artikelCount INTEGER;
-- Kommaseparierte Liste, die die Tupelmenge einschränkt
SET @rubrikIdList = '1,2,3,4,5,6,7';
-- Select-Statement, das Artikel in den in @rubrikIdList
-- angegebenen Rubriken zählt
SELECT @sqlStmt = 'SELECT @selectedCount = COUNT(artikelId)
FROM ARTIKELTABLE
WHERE rubrikId IN ('+@rubrikIdList+') ';
-- Deklaration der auszuwertenden Variablen
SET @paramDef = N'@selectedCount INT OUTPUT'
-- Ausführen der entsprechend parametrisierten
-- Stored Procedure sp_executesql
EXECUTE sp_executesql @sqlStmt ,
@paramDef ,
@selectedCount=@artikelCount OUTPUT;
-- Ergebnis ausgeben
SELECT @artikelCount;
I.W. wird die Stored Procedure sp_executesql
geeignet parametrisiert und mit EXECUTE
ausgeführt.