I have a stored procedure that should be able to be executed on any table of any database on my MS Sql Server. Most of the combination of EXEC and USE statements didn\'t res
In this case I sugest to use the 2 sp's in SQL Server:
sp_MSforeachtable
sp_MSforeachdb
for more information, please read the article in here. hope this help.
exec @RETURN_VALUE=sp_MSforeachtable @command1, @replacechar, @command2,
@command3, @whereand, @precommand, @postcommand
exec @RETURN_VALUE = sp_MSforeachdb @command1, @replacechar,
@command2, @command3, @precommand, @postcommand
Complete script:
declare @DatabaseName varchar(max), @DatabaseCharParam nchar(1)
declare @TableSchema varchar(max)
declare @TableName varchar(max), @TableCharParam nchar(1)
set @DatabaseName='DATABASENAME'; set @DatabaseCharParam='?'
set @TableSchema='dbo'
set @TableName='TABLENAME'; set @TableCharParam='$'
-- Exemple Script to execute in each table in each database
-- Create first part of a statement to update all columns that have type varchar
DECLARE @sSql VARCHAR(MAX)
set @sSql=''
SELECT @sSql = isnull(@sSql,'') + COLUMN_NAME + ' = LOWER(RTRIM(' + COLUMN_NAME + ')),'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE = 'varchar'
AND TABLE_CATALOG = @DatabaseName
AND TABLE_SCHEMA = @TableSchema
AND TABLE_NAME = @TableName
declare @EachTablecmd1 varchar(2000)
--Prepare @EachTablecmd1 the script to execution in each table using sp_MSforeachtable (ATENTION: @Command1 are limited to varchar(2000) )
--in sp_MSforeachtable @TableCharParam will be subtituted with owner i.e:[dbo].[TABLENAME]
set @sSql='update '+@TableCharParam+' set '+ left(@sSql,LEN(@sSql)-1)
set @EachTablecmd1='if '''''+ @TableCharParam +'''''=''''['+@TableSchema+'].['+@TableName+']'''' '+@sSql
--i.e.: if 'table1'='table1' update table1 set column1=LOWER(RTRIM(column1)),....
-- the @sSql for each table in a database
set @sSql ='exec sp_MSforeachtable @command1='''+@EachTablecmd1+''' ,@replacechar='''+@TableCharParam+''''
declare @EachBDcmd1 varchar(2000)
--Prepare the execution to each database using sp_MSforeachdb (ATENTION: @Command1 are limited to varchar(2000) )
set @EachBDcmd1='if '''+@DatabaseCharParam+'''='''+@DatabaseName+''' '+ @sSql
--print @EachBDcmd1
exec sp_MSforeachdb @command1=@EachBDcmd1,@replacechar=@DatabaseCharParam