Monday, June 1, 2009

list All the tables Existsed from all the SQL Databases

This Query Helps to list All the tables Existsed from all the SQL Databases

sp_msforeachdb 'select "?" AS db, * from [?].sys.tables'

The Following the original code of System Procedure "sp_MSforeachdb"

/*

* The following table definition will be created by SQLDMO at start of each connection.

* We don't create it here temporarily because we need it in Exec() or upgrade won't work.

*/

create proc sys.sp_MSforeachdb

@command1 nvarchar(2000), @replacechar nchar(1) = N'?', @command2 nvarchar(2000) = null, @command3 nvarchar(2000) = null,

@precommand nvarchar(2000) = null, @postcommand nvarchar(2000) = null

as

set deadlock_priority low

/* This proc returns one or more rows for each accessible db, with each db defaulting to its own result set */

/* @precommand and @postcommand may be used to force a single result set via a temp table. */

/* Preprocessor won't replace within quotes so have to use str(). */

declare @inaccessible nvarchar(12), @invalidlogin nvarchar(12), @dbinaccessible nvarchar(12)

select @inaccessible = ltrim(str(convert(int, 0x03e0), 11))

select @invalidlogin = ltrim(str(convert(int, 0x40000000), 11))

select @dbinaccessible = N'0x80000000' /* SQLDMODbUserProf_InaccessibleDb; the negative number doesn't work in convert() */

if (@precommand is not null)

exec(@precommand)

declare @origdb nvarchar(128)

select @origdb = db_name()

/* If it's a single user db and there's an entry for it in sysprocesses who isn't us, we can't use it. */

/* Create the select */

exec(N'declare hCForEachDatabase cursor global for select name from master.dbo.sysdatabases d ' +

N' where (d.status & ' + @inaccessible + N' = 0)' +

N' and (DATABASEPROPERTY(d.name, ''issingleuser'') = 0 and (has_dbaccess(d.name) = 1))' )

declare @retval int

select @retval = @@error

if (@retval = 0)

exec @retval = sys.sp_MSforeach_worker @command1, @replacechar, @command2, @command3, 1

if (@retval = 0 and @postcommand is not null)

exec(@postcommand)

declare @tempdb nvarchar(258)

SELECT @tempdb = REPLACE(@origdb, N']', N']]')

exec (N'use ' + N'[' + @tempdb + N']')

return @retval

Hope it Helps to Everyone, Please leave your valuable comments

No comments:

Post a Comment