Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 如何根据特定条件从所有表中获取行计数_Sql Server 2008_Tsql - Fatal编程技术网

Sql server 2008 如何根据特定条件从所有表中获取行计数

Sql server 2008 如何根据特定条件从所有表中获取行计数,sql-server-2008,tsql,Sql Server 2008,Tsql,我可以使用此查询获取所有表的行数 SELECT '[' + SCHEMA_NAME(t.schema_id) + '].[' + t.name + ']' AS fulltable_name, SCHEMA_NAME(t.schema_id) AS schema_name, t.name AS table_name, i.rows FROM sys.tables AS t INNER JOIN sys.sysindexes AS i ON t.object_id

我可以使用此查询获取所有表的行数

    SELECT '[' + SCHEMA_NAME(t.schema_id) + '].[' + t.name + ']' AS fulltable_name, SCHEMA_NAME(t.schema_id) AS schema_name, t.name AS table_name,
    i.rows
    FROM sys.tables AS t INNER JOIN
    sys.sysindexes AS i ON t.object_id = i.id AND i.indid < 2

**AND
t.name.programID = 4**
但是我需要计算programID=n的所有行 在where子句中添加粗体行时,我不断遇到以下错误

无法在nvarchar上调用方法。 任何帮助都是非常需要的
Andy

不能像访问属性一样访问示例中的表名。这只是一根绳子,而不是桌子本身。我已经制定了一个可能对你有用的解决方案。这感觉有点像一个黑客,但它会让你的方式

DECLARE @Value INT, @Column_Name VARCHAR(MAX)

SELECT @Value = 4, @Column_Name = 'ProgramId'

IF OBJECT_ID(N'tempdb..#Results',N'U') IS NOT NULL
            DROP TABLE #Results

SELECT  '[' + SCHEMA_NAME(t.schema_id) + '].[' + t.name + ']' AS fulltable_name, SCHEMA_NAME(t.schema_id) AS     schema_name, t.name AS table_name,
i.rows [Row_Count]
INTO #Results
FROM sys.tables AS t INNER JOIN
sys.sysindexes AS i ON t.object_id = i.id AND i.indid < 2
INNER JOIN information_schema.COLUMNS  C ON t.name = c.TABLE_NAME AND SCHEMA_NAME(t.schema_id)= c.TABLE_SCHEMA  
WHERE C.COLUMN_NAME = @Column_Name

DECLARE @SQL VARCHAR(MAX)

SELECT @SqL = COALESCE(@SqL +' UNION ',' ')  + 'SELECT '''+ fulltable_name + ''', COUNT(*) FROM ' +     fulltable_name +     ' where ' + @Column_Name + ' = ' + CAST(@Value AS VARCHAR(1000))+ ' GROUP BY ' + @Column_Name     + ' '
FROM #Results

PRINT(@SqL)
EXEC (@SqL)

IF OBJECT_ID(N'tempdb..#Results',N'U') IS NOT NULL
            DROP TABLE #Results

您确定数据库中的所有表都有列programID吗?如果是的话。。试试这个

exec sp_MSforeachtable 'SELECT ''?'' AS TableName,COUNT(*) AS cnt FROM ? WHERE programID = 4'
编辑:此查询将跳过没有columnprogramID的表的计数

CREATE TABLE #t (table_name Varchar(500), record_count int)

INSERT INTO #t (table_name,record_count)
exec sp_MSforeachtable '
     IF EXISTS(SELECT * FROM sys.columns WHERE name = ''programID'' 
             and object_id = object_id(''?''))
     EXEC(''SELECT ''''?'''' AS TableName,COUNT(*) AS cnt FROM ? WHERE programID = 4'')'

SELECT * FROM #t

您确定列的名称为“name.programID”吗?