[SQL] use[@variable]

Pagina: 1
Acties:

  • Yucon
  • Registratie: December 2000
  • Laatst online: 21:46
Hallo,
een sql script ziet er bijvoorbeeld als volgt uit:

code:
1
2
3
4
5
6
7
declare @database nvarchar(1024)

set @database = 'MijnDatabase'

use[@database]

select * from tabelInMijnDatabase


Dit wil niet werken, hoe ik ook ga kloten met quotes, hij probeert altijd te zoeken naar de database met de naam wat tussen de 2 [] haken staat.

Een andere oplossing bedacht:

code:
1
2
3
4
5
6
7
declare @database nvarchar(1024)
declare @statement nvarchar(1024)
set @database = 'MijnDatabase'
set @statement = 'use ['  + @database + ']'
exec sp_executesql @statement

select * from tabelInMijnDatabase


ook dit werkt niet, hij 'used' niet MijnDataBase.

Weet iemand hier nog een andere oplossing voor ??

Ow ja, ik heb dit nodig omdat ik met dit script aan verschillende databases users wil toevoegen/verwijderen. De verschillende databases worden uit een array gehaald.

( Sql server 2000 voor zover dit van toepassing is )

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Dit werkt anders goed bij mij:
code:
1
2
3
4
5
6
7
declare @naam nchar(10)
set @naam = 'adatabase'
declare @stat nchar(1000)
set @stat = 'use ' + @naam
exec sp_executesql @stat
set @stat = 'select * from tblklant'
exec sp_executesql @stat

https://fgheysels.github.io/


  • Slakkie_S81
  • Registratie: Juli 2002
  • Laatst online: 19-11-2025

Slakkie_S81

dwaas

Whoami, bij mij werkt jouw oplossing niet, hij voert de USE niet uit.
Als je in bv sql-query analyzer bovenin de database op master hebt staan,
dan jouw sql-script gebruikt, dan veranderd hij niet naar 'adatabase' maar hij blijft staan op master.

Als je dus in je select een tabel neerzet die in je Master database voorkomt, werkt het wel, maar als je een tabel selecteerd die in 'adatabase' zit, en NIET in master, krijg je de melding:
Invalid object name 'tblklant'.

De oplossing voor dit probleem weet ik ook niet, heb er ook al mee gestoeid

hi hi


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Dit werkt niet omdat sp_executesql in een andere scope werkt.
Onderstaande werkt wel:
SQL:
1
2
set @statement = 'use [' + @database + '] select * from tabelInMijnDatabase'
exec sp_executesql @statement

[ Voor 7% gewijzigd door Annie op 24-09-2003 10:34 ]

Today's subliminal thought is:


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Slakkie_S81 schreef op 24 September 2003 @ 10:18:
Whoami, bij mij werkt jouw oplossing niet, hij voert de USE niet uit.
Als je in bv sql-query analyzer bovenin de database op master hebt staan,
dan jouw sql-script gebruikt, dan veranderd hij niet naar 'adatabase' maar hij blijft staan op master.
Idd, bij mij zie je dat ook niet.
Echter, als je daarna een SELECT uitvoert, dan wordt die wel goed uitgevoerd in de net 'ge-usede' db.
Blijkt dus dat die USE wel gelukt is, want als je een ongeldige SELECT doet in de current DB, dan zou het niet werken.
Als je dus in je select een tabel neerzet die in je Master database voorkomt, werkt het wel, maar als je een tabel selecteerd die in 'adatabase' zit, en NIET in master, krijg je de melding:
Invalid object name 'tblklant'.
Strange, bij mij werkte het anderes wel..... Zal het vanavond nog eens thuis testen.

https://fgheysels.github.io/


  • Slakkie_S81
  • Registratie: Juli 2002
  • Laatst online: 19-11-2025

Slakkie_S81

dwaas

Annie schreef op 24 September 2003 @ 10:33:
Dit werkt niet omdat sp_executesql in een andere scope werkt.
Onderstaande werkt wel:
SQL:
1
2
set @statement = 'use [' + @database + '] select * from tabelInMijnDatabase'
exec sp_executesql @statement
Thnx _/-\o_ _/-\o_
zo werk het wel :D

hi hi

Pagina: 1