Hallo zusammen,
ich habe da mal wieder eine Frage :-)
Derzeit stelle ich meine Scripte um damit diese (für mich) besser lesbar sind, zudem schreibe ich Teile neu und anderst, denn man lernt (hier) ja immer gerne was dazu...
Da ich eigentlich ständig abfragen über alle Datenbanken mache, verwende ich dynamisches SQL da ich hier den Datenbanknamen und Owner/Schema innerhalb eines Cursors verwenden kann.
Nun möchte ich den Datenbanknamen z.Bsp. auch über Parameter übergeben, aber das will nicht so recht.
Im alten Script hatte ich den Datenbanknamen (@engid) wie folgt übergeben:
set @sqlcommand = 'select @ownerOUT = t.TABLE_SCHEMA '+ 'from ['+@engid+'].INFORMATION_SCHEMA.TABLES t '+ 'where t.TABLE_TYPE=''view'' and t.TABLE_SCHEMA <> ''ETL''' set @sqlparameter = N'@ownerOUT nvarchar(max) output' exec sp_executesql @sqlcommand, @sqlparameter, @ownerOUT=@owner output
Nun möchte ich den Datenbanknamen per Parameter übergeben:
set @sqlcommand = 'select @ownerOUT = t.TABLE_SCHEMA '+ 'from [@engidIN].INFORMATION_SCHEMA.TABLES t '+ 'where t.TABLE_TYPE=''view'' and t.TABLE_SCHEMA <> ''ETL''' set @sqlparameter = N'@engidIN nvarchar(max), @ownerOUT nvarchar(max) output' exec sp_executesql @sqlcommand, @sqlparameter, @engidIN=@engid, @ownerOUT=@owner output
Führe ich das Script aus, bekomme ich den Fehler
Msg 208, Level 16, State 1, Line 1 Invalid object name '@engidIN.INFORMATION_SCHEMA.TABLES'.
Was mache ich falsch?
Viele Grüsse,
Maximilian