Benutzer mit den meisten Antworten
SQL Befehl mit @Variable

Frage
-
Hallo,
ich habe folgenden SQL Befehl
select * from Tabelle where id in(1,2,3,4...)
Diesen SQL Befehl will ich jedoch mit einer @Variablen absetzten
@Variable="1,2,3,4"
select * from Tabelle where id in(@Variable)
Ich befinde mich in Visual Studio und verwende das SQLCommand Objekt.
Nun erhalte ich folgende Fehlermeldung: "Fehler beim Konvertieren des nvarchar-Werts '1,2' in den int-Datentyp.
Gibt es eine Möglichkeit das Problem einfach zu lösen?
Danke für jede Info
Thomas
Antworten
-
Hallo Thomas,
Du müsstest die Werte entweder in eine (temporäre) Tabelle oder eine Tabellenvariable stecken und dann mit
SELECT ... FROM Tabelle WHERE ID IN ( SELECT Spalte FROM AndereTabelle )
abfragen oder das SQL Statement als String erstellen und deine Werte dort einbauen.
DECLARE @SQL nvarchar( 1000 )
SET @SQL = 'SELECT ... FROM Tabelle WHERE ID IN ( ' + @Variable + ' )'
...Letzteres ist allerdings meist suboptimal.
Zur Frage an sich siehe auch:
http://stackoverflow.com/questions/337704/parameterizing-an-sql-in-clause
http://blog.jontav.com/post/16580686761/tsql-in-using-a-variable-to-filter-records-with-the
...
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Mittwoch, 21. November 2012 16:33
- Als Antwort vorgeschlagen Uwe RickenMVP Donnerstag, 22. November 2012 09:51
- Als Antwort markiert Thomas1234567 Donnerstag, 22. November 2012 09:56
-
Hallo Thomas,
so geht es nicht, Du hast einen String mit einer Liste von Zahlen, und die kommt beim SQL Server auch so an; als ein String.
Bei einer überschaubarer Anzahl an mäglichen Parametern könntest Du dynamisch im SQL Statement zusammenbauen, also
select * from Tabelle where id in(@p1,@p2,@p3,@p4)
und dann die einzelnen Parametern auch einzeln zuweisen.
Ansonsten gibt es neben den von Stefan genannten Möglichkeiten auch die Option mit TVP = Table Valued Parameter zu arbeiten, siehe Tabellenwertparameter
Olaf Helper
Blog Xing- Als Antwort vorgeschlagen Uwe RickenMVP Donnerstag, 22. November 2012 09:51
- Als Antwort markiert Thomas1234567 Donnerstag, 22. November 2012 09:56
Alle Antworten
-
Hallo Thomas,
Du müsstest die Werte entweder in eine (temporäre) Tabelle oder eine Tabellenvariable stecken und dann mit
SELECT ... FROM Tabelle WHERE ID IN ( SELECT Spalte FROM AndereTabelle )
abfragen oder das SQL Statement als String erstellen und deine Werte dort einbauen.
DECLARE @SQL nvarchar( 1000 )
SET @SQL = 'SELECT ... FROM Tabelle WHERE ID IN ( ' + @Variable + ' )'
...Letzteres ist allerdings meist suboptimal.
Zur Frage an sich siehe auch:
http://stackoverflow.com/questions/337704/parameterizing-an-sql-in-clause
http://blog.jontav.com/post/16580686761/tsql-in-using-a-variable-to-filter-records-with-the
...
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Mittwoch, 21. November 2012 16:33
- Als Antwort vorgeschlagen Uwe RickenMVP Donnerstag, 22. November 2012 09:51
- Als Antwort markiert Thomas1234567 Donnerstag, 22. November 2012 09:56
-
Hallo Thomas,
so geht es nicht, Du hast einen String mit einer Liste von Zahlen, und die kommt beim SQL Server auch so an; als ein String.
Bei einer überschaubarer Anzahl an mäglichen Parametern könntest Du dynamisch im SQL Statement zusammenbauen, also
select * from Tabelle where id in(@p1,@p2,@p3,@p4)
und dann die einzelnen Parametern auch einzeln zuweisen.
Ansonsten gibt es neben den von Stefan genannten Möglichkeiten auch die Option mit TVP = Table Valued Parameter zu arbeiten, siehe Tabellenwertparameter
Olaf Helper
Blog Xing- Als Antwort vorgeschlagen Uwe RickenMVP Donnerstag, 22. November 2012 09:51
- Als Antwort markiert Thomas1234567 Donnerstag, 22. November 2012 09:56