2017-06-05 63 views
0

我做到了。但不幸的是,這一切都在許多表中。我想在一個獨特的表格中返回所有內容。也許使用「聯盟」,但我不知道該怎麼做。如何使用最終的「附加」列出我的數據庫的所有數據庫和所有表,並列出SQL Server中每個表的總行數?

這是我的代碼:

EXEC sp_msforeachdb 'select ''?''AS "DataBase", s.name, t.name AS "Tables",max(si.rows) as "Rows Line" 
from [?].sys.tables t inner join [?].sys.schemas s 
on t.schema_id = s.schema_id 
inner join [?].sys.partitions si on t.object_id = si.object_id 
where t.name like "%ATTACH" group by s.name,t.name'` 
+0

THX編輯:) – Gladiador

回答

0

我終於找到一個solution.i只是使用的存儲過程具有結果我一直在尋找for.So決定張貼在這裏的答案也許這將幫助別人。

DECLARE @banco_nome nvarchar(MAX), @tabela_nome nvarchar(MAX) 

DECLARE @banco_cursor CURSOR 
DECLARE @sqlstatement nvarchar(MAX) 
DECLARE @count_sql nvarchar(MAX) 
DECLARE @total int 

DECLARE @RegistrosFotograficos TABLE 
(
    DatabaseName nvarchar(max), 
    TableName nvarchar(max), 
    Total int 
) 

SET @banco_cursor = CURSOR FORWARD_ONLY FOR 
    SELECT name FROM sys.databases 

OPEN @banco_cursor 
FETCH NEXT FROM @banco_cursor INTO @banco_nome 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sqlstatement = 'DECLARE tabela_cursor CURSOR FORWARD_ONLY FOR SELECT TABLE_NAME FROM ' + @banco_nome + '.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = ''BASE TABLE'' AND TABLE_NAME LIKE ''%ATTACH'' ORDER BY TABLE_NAME' 
    EXEC sp_executesql @sqlstatement 

    OPEN tabela_cursor 
    FETCH NEXT FROM tabela_cursor INTO @tabela_nome 
    WHILE @@FETCH_STATUS = 0 
    BEGIN 
     SET @count_sql = 'USE ' + @banco_nome + '; SELECT @total=COUNT(1) FROM ' + @tabela_nome; 
     EXECUTE sp_executesql @count_sql, N'@total int OUTPUT', @[email protected] OUTPUT 

     INSERT INTO @RegistrosFotograficos (DatabaseName, TableName, Total) VALUES (@banco_nome, @tabela_nome, @total); 

     FETCH NEXT FROM tabela_cursor INTO @tabela_nome 
    END 
    CLOSE tabela_cursor; 
    DEALLOCATE tabela_cursor; 

    FETCH NEXT FROM @banco_cursor INTO @banco_nome 
END 
CLOSE @banco_cursor; 
DEALLOCATE @banco_cursor; 

SELECT * FROM @RegistrosFotograficos 
0

你不能做一個單一的查詢。

你可以查詢sys.databases中表將您的所有數據庫的臨時表,然後每個數據庫上運行動態查詢來查詢你的問題的結果存儲在所有另一個臨時表。

那麼,在年底,您只需選擇從最後臨時表中的所有行。

+0

我試圖瞭解什麼ü說,但我仍然有許多問題...可以ü請告訴我hjow做,創建一個腳本,讓我只是一些評論理解它。 – Gladiador

+0

不,對不起,我沒有這方面的腳本。將其分解成小步驟並嘗試每個步驟,然後問一個新問題,如果你有一個特定的問題。 –

+0

好的thx回覆@Tab Alleman。我會盡力找到擺脫這種麻煩的想法哈哈哈...... – Gladiador

0

這將列出給定數據庫中的所有表以及每個表中的行數。注意結果表中的命名#results:

set nocount on 

declare @curtable sysname 
declare @prevtable sysname 
declare @curcount int 
declare @tsql varchar(500) 

if object_ID('tempdb..#curtables','U') is not null 
    drop table #curtables 

select name into #curtables 
from sys.objects 
where type='U' 
order by 1 

if object_id('tempdb..#results','U') is not null 
    drop table #results 

create table #results(name sysname,numrows int) 

select top 1 @curtable=name from #curtables order by name 
while (1=1) 
begin 

    set @tsql = 'select '''+quotename(@curtable) +''',count(*) numrows from '+quotename(@curtable) 
    print @tsql 
    insert into #results 
    exec (@tsql) 
    set @prevtable= @curtable 
    select top 1 @curtable = name 
    from #curtables 
    where name > @prevtable 
    order by name 
    if @[email protected] 
     break 

相關問題