Benutzer mit den meisten Antworten
Dynamisches SQL, Tabellenname übergeben

Frage
-
Hallo,
ich habe versucht eine dynamische Abfrage zu erstellen, nur dismal muss ich auch auf verschieden Datenbanken und Tabellen zugreifen bwz möchte ich übergeben.
Leider kann ich übergebene Parameter ja nur als Bedingung angeben, aber nicht für Datenbanken und Tabellen verwenden?
... from [@serverIN].[@dbIN].[@tableIN].member
Ich weiss wenn ich die Variablen direkt einbinde, dann geht es, die Frage ist aber ob es auch als Parameter geht.
Viele Grüsse,
Maximilian
Antworten
-
Hallo Maximilian,
nein, das geht nicht.
Und es geht auch nicht, wenn Du die Variablen "direkt einbindest", was auch immer Du damit meinen könntest.
Objektnamen (Spalten, Tabellen, ...) können nicht als Parameter angegeben werden. Um das zu bewerkstelligen, muss das gesamte SQL Statement als String angegeben und dann bspw. per sp_executesql ausgeführt werden. Siehe dazu:
https://msdn.microsoft.com/de-de/library/ms188001.aspx
Lies dir aber diesen Artikel auch mal durch, ist recht interessant:
http://www.insidesql.org/blogs/frankkalis/2004/07/16/dynamisches-sql-fluch-und-segen
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- Als Antwort vorgeschlagen Holger M. Rößler Donnerstag, 7. Mai 2015 13:01
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 15. Mai 2015 13:47
-
Hallo Maximilian,
für Objektnamen kann man keine Variablen verwenden, hier ist der einzige weg dynamisches SQL zu verwenden, nach der Art
-- Übergabe Parameter DECLARE @table nvarchar(128); SET @table = N'dbo.sysobjects'; -- Dynamische Abfrage erstellen DECLARE @sql nvarchar(4000); SET @sql = N'SELECT * FROM ' + @table; -- Kontrolle PRINT @sql; -- Ausführen EXEC sp_executeSQL @sql;
Sollte man aber möglichst vermeiden; siehe The Curse and Blessings of Dynamic SQLOlaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort vorgeschlagen Holger M. Rößler Donnerstag, 7. Mai 2015 13:28
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 15. Mai 2015 14:01
Alle Antworten
-
Hallo Maximilian,
nein, das geht nicht.
Und es geht auch nicht, wenn Du die Variablen "direkt einbindest", was auch immer Du damit meinen könntest.
Objektnamen (Spalten, Tabellen, ...) können nicht als Parameter angegeben werden. Um das zu bewerkstelligen, muss das gesamte SQL Statement als String angegeben und dann bspw. per sp_executesql ausgeführt werden. Siehe dazu:
https://msdn.microsoft.com/de-de/library/ms188001.aspx
Lies dir aber diesen Artikel auch mal durch, ist recht interessant:
http://www.insidesql.org/blogs/frankkalis/2004/07/16/dynamisches-sql-fluch-und-segen
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- Als Antwort vorgeschlagen Holger M. Rößler Donnerstag, 7. Mai 2015 13:01
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 15. Mai 2015 13:47
-
Hallo Maximilian,
für Objektnamen kann man keine Variablen verwenden, hier ist der einzige weg dynamisches SQL zu verwenden, nach der Art
-- Übergabe Parameter DECLARE @table nvarchar(128); SET @table = N'dbo.sysobjects'; -- Dynamische Abfrage erstellen DECLARE @sql nvarchar(4000); SET @sql = N'SELECT * FROM ' + @table; -- Kontrolle PRINT @sql; -- Ausführen EXEC sp_executeSQL @sql;
Sollte man aber möglichst vermeiden; siehe The Curse and Blessings of Dynamic SQLOlaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort vorgeschlagen Holger M. Rößler Donnerstag, 7. Mai 2015 13:28
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 15. Mai 2015 14:01
-
Hallo Maximilian,
für Objektnamen kann man keine Variablen verwenden, hier ist der einzige weg dynamisches SQL zu verwenden, nach der Art
-- Übergabe Parameter DECLARE @table nvarchar(128); SET @table = N'dbo.sysobjects'; -- Dynamische Abfrage erstellen DECLARE @sql nvarchar(4000); SET @sql = N'SELECT * FROM ' + @table; -- Kontrolle PRINT @sql; -- Ausführen EXEC sp_executeSQL @sql;
Sollte man aber möglichst vermeiden; siehe The Curse and Blessings of Dynamic SQL
...Andreas Wolter (Blog | Twitter)
MCSM: Microsoft Certified Solutions Master Data Platform, MCM, MVP
www.SarpedonQualityLab.com | www.SQL-Server-Master-Class.com