2013-07-19 2 views
3

SQL Server (2005, 2008, 상관 없습니다)에서 간단한 절차를 도와주십시오.커서가있는 /없는 간단한 SQL 프로 시저

나는 데이터베이스의 특정 테이블 이름의 이름 인 테이블 dbo.[columns] with 1000 lines을 가지고 있습니다.

결론이 난 DBO 검색된 각 테이블 이름, 을 테이블 1000 개 개의 라인을 파싱하는 과정을 만들 필요가있다. [열]되어야 다음

select: select count(*), ''''+[column_name]+'''' from dbo.[column_name] 

결과를 실행할 이 같은 :

count(*) table_name: 
100   employees 
0   ex_employees 
25   addresses 
10   birthdays 

어떤 힌트가? 사전에

감사합니다, 보그

답변

1
SELECT COUNT(Column_With_List_Of_Table_Names_Here) 
     , Column_With_List_Of_Table_Names_Here 
FROM YourDatabase.dbo.YourTable 
GROUP BY Column_With_List_Of_Table_Names_Here; 
0

은 아마 당신은 요구하고있다,하지만 난 당신이 원하는 생각하는 결과를 얻을해야하지 무엇을. 당신은 더 정확하게해야 당신의 dbo.[columns]이 쿼리에 합류

내부를 COUNT(*)

SELECT i.rowcnt, o.name FROM sysindexes i 
LEFT JOIN sys.objects o ON i.id = o.object_id 
WHERE indid <2 
ORDER BY name 

또는

SELECT SUM (row_count) AS ROWS, o.Name AS TableName 
FROM sys.dm_db_partition_stats s 
LEFT JOIN sys.objects o ON s.object_id = o.object_id AND (index_id=0 or index_id=1) 
GROUP BY o.Name 

* 2 쿼리를 실행하지 않고 각 테이블의 행 수를 얻기 위해 시스템 뷰를 사용할 수 있습니다 원하는 테이블에 대해서만 결과를 필터링하십시오.

0

CURSOR 그리고 Dynamic sql

CREATE TABLE #temp(count_ int,table_name varchar(50)) 
DECLARE @column_Name VARCHAR(50) 
DECLARE @query VARCHAR(500) 

    DECLARE table_cursor CURSOR FOR 
    SELECT [column_name] from dbo.[column_name] 
    OPEN product_cursor 
    FETCH NEXT FROM product_cursor INTO @column_Name 

    WHILE @@FETCH_STATUS = 0 
    BEGIN 

    SET @query='INSERT INTO #temp SELECT'+ @column_Name+',COUNT(*) FROM'+ @column_Name 

    EXEC sp_executesql @[email protected] 
    /*this will insert the coresponding table name and its row count to #temp*/ 

    END 

    CLOSE product_cursor 
    DEALLOCATE product_cursor 


select * from #temp 
를 사용하여이 시도