सर्वर पर सभी तालिकाओं को प्राप्त करने के सरल तरीके के लिए, यह प्रयास करें:
SET NOCOUNT ON
DECLARE @AllTables table (CompleteTableName nvarchar(4000))
INSERT INTO @AllTables (CompleteTableName)
EXEC sp_msforeachdb 'select @@SERVERNAME+''.''+''?''+''.''+s.name+''.''+t.name from [?].sys.tables t inner join sys.schemas s on t.schema_id=s.schema_id'
SET NOCOUNT OFF
SELECT * FROM @AllTables ORDER BY 1
यह एक एकल कॉलम लौटाएगा जिसमें सर्वर+डेटाबेस+स्कीमा+टेबल नाम शामिल है:नमूना आउटपुट:
CompleteTableName
--------------------------------------------
YourServer.YourDatabase1.YourSchema1.YourTable1
YourServer.YourDatabase1.YourSchema1.YourTable2
YourServer.YourDatabase1.YourSchema2.YourTable1
YourServer.YourDatabase1.YourSchema2.YourTable2
YourServer.YourDatabase2.YourSchema1.YourTable1
यदि आप SQL Server 2005 या इसके बाद के संस्करण पर नहीं हैं, तो DECLARE @AllTables table
को बदलें CREATE TABLE #AllTables
. के साथ और फिर हर @AllTables
#AllTables
. के साथ और यह काम करेगा।
संपादित करें
यहां एक संस्करण दिया गया है जो सर्वर+डेटाबेस+स्कीमा+टेबल नामों के किसी भी हिस्से या हिस्से पर खोज पैरामीटर का उपयोग करने की अनुमति देगा:
SET NOCOUNT ON
DECLARE @AllTables table (CompleteTableName nvarchar(4000))
DECLARE @Search nvarchar(4000)
,@SQL nvarchar(4000)
SET @Search=null --all rows
SET @SQL='select @@SERVERNAME+''.''+''?''+''.''+s.name+''.''+t.name from [?].sys.tables t inner join sys.schemas s on t.schema_id=s.schema_id WHERE @@SERVERNAME+''.''+''?''+''.''+s.name+''.''+t.name LIKE ''%'+ISNULL(@SEARCH,'')+'%'''
INSERT INTO @AllTables (CompleteTableName)
EXEC sp_msforeachdb @SQL
SET NOCOUNT OFF
SELECT * FROM @AllTables ORDER BY 1
सभी तालिकाओं के लिए @Search को NULL पर सेट करें, इसे 'dbo.users' या 'users' या '.master.dbo' जैसी चीज़ों पर सेट करें या '.master.%.u', आदि जैसे वाइल्डकार्ड भी शामिल करें।