moralesrd
asked on
How set the database name as variable
I'm looking the way to declare a database name in a variable, then all the queries can be updated just replacing the name in the variable.
Any ideas?
Any ideas?
In what particular scenario are you thinking?
The only ways I can think of to do this would be dynamic sql or OPENQUERY or EXECUTE () . ON <SERVER> which would all require turning all your T-SQL into strings, and there will be extra work required if your T-SQL includes things like function creation.
The only ways I can think of to do this would be dynamic sql or OPENQUERY or EXECUTE () . ON <SERVER> which would all require turning all your T-SQL into strings, and there will be extra work required if your T-SQL includes things like function creation.
ASKER
I'm using MS SQL 2005.... that I'm trying to do is something like this:
select * from MyDatabase.dbo.MyTable Alias
select * from MyDatabase.dbo.MyTable2 Alias2
select * from MyDatabase.dbo.MyTable3 Alias3
Note: MyDatabase is used in many queries inside of my sql file, and needs to be changed constantly to manage different databases, so I would like to use something like:
declare @MyDBName vachar(25)
set @MyDBName = 'MyDatabase'
select * from @MyDBName.dbo.MyTable Alias
I'm not sure if there such option possible, so, any idea that could help...
select * from MyDatabase.dbo.MyTable Alias
select * from MyDatabase.dbo.MyTable2 Alias2
select * from MyDatabase.dbo.MyTable3 Alias3
Note: MyDatabase is used in many queries inside of my sql file, and needs to be changed constantly to manage different databases, so I would like to use something like:
declare @MyDBName vachar(25)
set @MyDBName = 'MyDatabase'
select * from @MyDBName.dbo.MyTable Alias
I'm not sure if there such option possible, so, any idea that could help...
I think this is how and what the link on dynamic SQL I provided deals with.
not sure what the point of your use of the Alias as it is only valid during the execution of the query and no where else.
You could have an array of databases and then reference them that way to avoid the multiple declare/set mechanism.
not sure what the point of your use of the Alias as it is only valid during the execution of the query and no where else.
You could have an array of databases and then reference them that way to avoid the multiple declare/set mechanism.
Like I said, I'm pretty sure it is not possible for more complicated stuff, but for the easy ones, you could use
or
But once it includes things like create proc, something more complicated is required.
use MyDatabase -- change it just here
select * from dbo.MyTable Alias
select * from dbo.MyTable2 Alias2
select * from dbo.MyTable3 Alias3
or
declare @MyDBName varchar(25)
set @MyDBName = 'MyDatabase'
declare @sql nvarchar(max)
set @sql = replace(' -- your whole query after this line
select * from :dbname:.dbo.MyTable Alias
select * from :dbname:.dbo.MyTable2 Alias2 where txtCol like ''A%'' -- example of doubling up
select * from :dbname:.dbo.MyTable3 Alias3
' -- to before this line. double up any quotes
, ':dbname:', @MyDBName)
exec (@sql)
But once it includes things like create proc, something more complicated is required.
ASKER
With the option b, is possible to add multiple databases?
Sure, something like this
Here I used :dbname: and :db2: (wrapped in : to make it look unique, normally your sql shouldn't have anything looking like that so it is safe).
declare @MyDBName varchar(25), @MyDBName2 varchar(25)
select @MyDBName = 'MyDatabase', @MyDBName2 = 'DB2'
declare @sql nvarchar(max)
set @sql = replace(replace(' -- your whole query after this line
select * from :dbname:.dbo.MyTable Alias
select * into :db2:..othertable1 from :dbname:.dbo.MyTable2 Alias2 where txtCol like ''A%'' -- example of doubling up
select * from :dbname:.dbo.MyTable3 Alias3
' -- to before this line. double up any quotes
, ':dbname:', @MyDBName)
, ':db2:', @MyDBName2)
exec (@sql)
The key really is that you are building a template TSQL string, and using the REPLACE to swap in some variables.Here I used :dbname: and :db2: (wrapped in : to make it look unique, normally your sql shouldn't have anything looking like that so it is safe).
Hi you can use sp_msforeachdb undocumented stored procedure to execute the set of T-SQL commands against each database on the server.
sp_MSforeachdb
'USE ?
IF DB_ID(''?'') in (5,6) -- you can add multiple Database IDs seperated by a cama, where you want execute the cmmoands against the database(s)
BEGIN
select db_name() -- you can replace your select statements here
end'
K. RajaSekhar Reddy
www.dbaarticles.com
FTTDBAS@dbaarticles.com
sp_MSforeachdb
'USE ?
IF DB_ID(''?'') in (5,6) -- you can add multiple Database IDs seperated by a cama, where you want execute the cmmoands against the database(s)
BEGIN
select db_name() -- you can replace your select statements here
end'
K. RajaSekhar Reddy
www.dbaarticles.com
FTTDBAS@dbaarticles.com
ASKER
I'm trying to generate an script using your settings, however I'm getting the error:
Must declare the scalar variable "@MyDBName".
Any ideas?
Must declare the scalar variable "@MyDBName".
Any ideas?
ASKER
krsreddy5, could youu provide an example with an small quey included?
> I'm trying to generate an script using your settings, however I'm getting the error:
> Must declare the scalar variable "@MyDBName".
What query did you use exactly?
> Must declare the scalar variable "@MyDBName".
What query did you use exactly?
ASKER
DECLARE @MyDBName varchar(25), @MyDBName2 varchar(25)
select @MyDBName = 'DB1', @MyDBName2 = 'DB2'
declare @sql nvarchar(max)
set @sql = replace(replace('
select tb1.var3 from
@MyDBName.dbo.table1 tb1,
@MyDBName2.dbo.table2 tb2
where tb1.var = tb2.var
' -- to before this line. double up any quotes
, ':dbname:', @MyDBName)
, ':db2:', @MyDBName2)
exec (@sql)
------
select @MyDBName = 'DB1', @MyDBName2 = 'DB2'
declare @sql nvarchar(max)
set @sql = replace(replace('
select tb1.var3 from
@MyDBName.dbo.table1 tb1,
@MyDBName2.dbo.table2 tb2
where tb1.var = tb2.var
' -- to before this line. double up any quotes
, ':dbname:', @MyDBName)
, ':db2:', @MyDBName2)
exec (@sql)
------
ASKER CERTIFIED SOLUTION
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
Your query can have a variable i.e. select * from `$table_name_variable`
I.e. you are looking at dynamic queries?
http://www.databasejournal.com/features/mssql/article.php/1438931/Dynamic-SQL-Beginners-Guide.htm