để có một cách đơn giản để lấy tất cả các bảng trên máy chủ, hãy thử cách này:
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
nó sẽ trả về một cột duy nhất chứa máy chủ + cơ sở dữ liệu + lược đồ + tên bảng:đầu ra mẫu:
CompleteTableName
--------------------------------------------
YourServer.YourDatabase1.YourSchema1.YourTable1
YourServer.YourDatabase1.YourSchema1.YourTable2
YourServer.YourDatabase1.YourSchema2.YourTable1
YourServer.YourDatabase1.YourSchema2.YourTable2
YourServer.YourDatabase2.YourSchema1.YourTable1
nếu bạn không sử dụng SQL Server 2005 trở lên, hãy thay thế bảng DECLARE @AllTables table
với CREATE TABLE #AllTables
và sau đó mọi @AllTables
với #AllTables
và nó sẽ hoạt động.
CHỈNH SỬA
đây là phiên bản cho phép sử dụng tham số tìm kiếm trên bất kỳ phần nào hoặc các phần của máy chủ + cơ sở dữ liệu + lược đồ + tên bảng:
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
đặt @Search thành NULL cho tất cả các bảng, đặt nó thành những thứ như 'dbo.users' hoặc 'users' hoặc '.master.dbo' hoặc thậm chí bao gồm các ký tự đại diện như '.master.%. u', v.v.