Sql-Server: SQL Statement als String mit Variablen und IN-Klausel auswerten

21.11.2010 Programmieren

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.

Hat Dir dieser Inhalt gefallen? Möchtest Du mir etwas Gutes tun, dann fülle doch ein wenig Kaffee in meine leere Kaffeekanne.
Nutze dazu einfach meinen PayPal.Me-Button*. Vielen Dank!

*Mehr Informationen zum PayPal.Me-Link erhältst Du hier: Impressum & Datenschutz