server and executes a Stored Procedure in each of them. Here are the
steps:
1: The first step is to get name of databases in to a cursor.
2: Build dynamic SQL to change database to database in variable - this
step fails
3: Execute SP
4: Move to next database.
Is it not possible to change current database using Dynamic SQL? Can
someone help me here please?
Here is the code I am using:
--EXECUTE SQL Statement on all Databases
DECLARE
@.DatabaseName varchar(100)
, @.SQL varchar(500)
DECLARE DBNameCursor CURSOR FOR
SELECT
[Name] AS DatabaseName
FROM
master.dbo.sysdatabases
ORDER BY
DatabaseName
OPEN DBNameCursor
FETCH NEXT FROM DBNameCursor
INTO @.DatabaseName
WHILE @.@.FETCH_STATUS = 0
BEGIN
--Change to Database
SELECT
@.SQL = 'USE ' + @.DatabaseName
EXEC(@.SQL)
--SQL Statement to be run
EXEC dbo.SPName
FETCH NEXT FROM DBNameCursor
INTO @.DatabaseName
END
CLOSE DBNameCursor
DEALLOCATE DBNameCursor
-------
Thanks in advance!
Vishal SinhaOn Feb 7, 7:02 am, "SQLJunkie" <vsinh...@.gmail.comwrote:
Quote:
Originally Posted by
I have a small SQL script that rotates through all databases on the
server and executes a Stored Procedure in each of them. Here are the
steps:
1: The first step is to get name of databases in to a cursor.
2: Build dynamic SQL to change database to database in variable - this
step fails
3: Execute SP
4: Move to next database.
Is it not possible to change current database using Dynamic SQL? Can
someone help me here please?
>
Here is the code I am using:
-- EXECUTE SQL Statement on all Databases
>
DECLARE
@.DatabaseName varchar(100)
, @.SQL varchar(500)
>
DECLARE DBNameCursor CURSOR FOR
SELECT
[Name] AS DatabaseName
FROM
master.dbo.sysdatabases
ORDER BY
DatabaseName
>
OPEN DBNameCursor
>
FETCH NEXT FROM DBNameCursor
INTO @.DatabaseName
>
WHILE @.@.FETCH_STATUS = 0
BEGIN
-- Change to Database
SELECT
@.SQL = 'USE ' + @.DatabaseName
>
EXEC(@.SQL)
>
-- SQL Statement to be run
EXEC dbo.SPName
>
FETCH NEXT FROM DBNameCursor
INTO @.DatabaseName
END
>
CLOSE DBNameCursor
DEALLOCATE DBNameCursor
>
-------
Thanks in advance!
Vishal Sinha
If I recall correctly EXEC starts a new thread that won't know about
the preceeding USE statement.
My favorite dynamic SQL site:
http://www.sommarskog.se/dyn-search.html|||SQLJunkie (vsinha73@.gmail.com) writes:
Quote:
Originally Posted by
I have a small SQL script that rotates through all databases on the
server and executes a Stored Procedure in each of them. Here are the
steps:
1: The first step is to get name of databases in to a cursor.
2: Build dynamic SQL to change database to database in variable - this
step fails
3: Execute SP
4: Move to next database.
Is it not possible to change current database using Dynamic SQL? Can
someone help me here please?
Yes, but the effect of the USE lasts only for the duration of the of the
dynamic SQL.
Quote:
Originally Posted by
SELECT
@.SQL = 'USE ' + @.DatabaseName
>
EXEC(@.SQL)
>
-- SQL Statement to be run
EXEC dbo.SPName
If all you want to do is to run a stored procedure in each database,
this is the easiest way to do:
SELECT @.SPname = @.DatabaseName + '.dbo.SPName'
EXEC @.SPname
You may also be interested in sp_MSforeachdb:
EXEC sp_MSforeachdb 'EXEC ?.dbo.SPNAme'
This procedure is undocumented and unsupported, but it's nevertheless
fairly popular.
--
Erland Sommarskog, SQL Server MVP, esquel@.sommarskog.se
Books Online for SQL Server 2005 at
http://www.microsoft.com/technet/pr...oads/books.mspx
Books Online for SQL Server 2000 at
http://www.microsoft.com/sql/prodin...ions/books.mspx|||Thanks everyone for the replies. The following example is fine for
generic SPs:
SELECT @.SPname = @.DatabaseName + '.dbo.SPName'
EXEC @.SPname
But what if I have to run SPs like SP_updatestats etc? then it will
not work.
Thanks!
On Feb 7, 5:35 pm, Erland Sommarskog <esq...@.sommarskog.sewrote:
Quote:
Originally Posted by
SQLJunkie (vsinh...@.gmail.com) writes:
Quote:
Originally Posted by
I have a small SQL script that rotates through all databases on the
server and executes a Stored Procedure in each of them. Here are the
steps:
1: The first step is to get name of databases in to a cursor.
2: Build dynamic SQL to change database to database in variable - this
step fails
3: Execute SP
4: Move to next database.
Is it not possible to change current database using Dynamic SQL? Can
someone help me here please?
>
Yes, but the effect of the USE lasts only for the duration of the of the
dynamic SQL.
>
Quote:
Originally Posted by
SELECT
@.SQL = 'USE ' + @.DatabaseName
>
Quote:
Originally Posted by
EXEC(@.SQL)
>
Quote:
Originally Posted by
-- SQL Statement to be run
EXEC dbo.SPName
>
If all you want to do is to run a stored procedure in each database,
this is the easiest way to do:
>
SELECT @.SPname = @.DatabaseName + '.dbo.SPName'
EXEC @.SPname
>
You may also be interested in sp_MSforeachdb:
>
EXEC sp_MSforeachdb 'EXEC ?.dbo.SPNAme'
>
This procedure is undocumented and unsupported, but it's nevertheless
fairly popular.
>
--
Erland Sommarskog, SQL Server MVP, esq...@.sommarskog.se
>
Books Online for SQL Server 2005 athttp://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books...
Books Online for SQL Server 2000 athttp://www.microsoft.com/sql/prodinfo/previousversions/books.mspx|||SQLJunkie (vsinha73@.gmail.com) writes:
Quote:
Originally Posted by
Thanks everyone for the replies. The following example is fine for
generic SPs:
SELECT @.SPname = @.DatabaseName + '.dbo.SPName'
EXEC @.SPname
>
But what if I have to run SPs like SP_updatestats etc? then it will
not work.
Au contraire, it will work just fine! If you say:
EXEC mydb..sp_systemprocedure
the system procedure will execute in the context of mydb.
--
Erland Sommarskog, SQL Server MVP, esquel@.sommarskog.se
Books Online for SQL Server 2005 at
http://www.microsoft.com/technet/pr...oads/books.mspx
Books Online for SQL Server 2000 at
http://www.microsoft.com/sql/prodin...ions/books.mspx|||Thanks - it worked!
Momentary lapse of reason :)
On Feb 8, 5:39 pm, Erland Sommarskog <esq...@.sommarskog.sewrote:
Quote:
Originally Posted by
SQLJunkie (vsinh...@.gmail.com) writes:
Quote:
Originally Posted by
Thanks everyone for the replies. The following example is fine for
generic SPs:
SELECT @.SPname = @.DatabaseName + '.dbo.SPName'
EXEC @.SPname
>
Quote:
Originally Posted by
But what if I have to run SPs like SP_updatestats etc? then it will
not work.
>
Au contraire, it will work just fine! If you say:
>
EXEC mydb..sp_systemprocedure
>
the system procedure will execute in the context of mydb.
>
--
Erland Sommarskog, SQL Server MVP, esq...@.sommarskog.se
>
Books Online for SQL Server 2005 athttp://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books...
Books Online for SQL Server 2000 athttp://www.microsoft.com/sql/prodinfo/previousversions/books.mspx
No comments:
Post a Comment