检查db中的所有表的值

时间:2014-06-26 11:38:56

标签: sql sql-server

我对四个SQL Server数据库具有只读权限。

在每个数据库中,大约一半的表都有一个名为[DIM_1]的列。

我对每个列中出现特定字符串值(例如' ABCD')的次数感兴趣。

我需要一种方法来返回一个看起来像

的数据表

DatabaseName,TableName,CountOfABCD

我最初尝试用循环执行此操作,但这非常糟糕,我遇到了一个问题,即您无法使用变量作为表名。

我想知道我能用sp_MSforeachtable做些什么,但我的数据库技能有点下降。

有人会有什么建议吗?我找到了创建执行任务的存储过程的脚本(例如http://vyaskn.tripod.com/search_all_columns_in_all_tables.htm),但由于我的访问级别,我无法创建它们。他们还使用临时表,我也无法创建。

感激地收到任何想法。

谢谢,

汤姆

1 个答案:

答案 0 :(得分:0)

正如您所说,您可以使用sp_MSforeachtable,但在您的情况下,我不知道您是否能够将结果列入表格,因为您无法创建任何结果。< / p>

在这里,我将查看已请求列的所有表格。

DECLARE @CountOfABCD AS VARCHAR(20)
SET @CountOfABCD='ABCD'

DECLARE @sql nvarchar(2000)
SET @sql = '
    DECLARE @COUNT AS INT
    SELECT @COUNT=COUNT(*) FROM [SERVER].[DATABASE].? WHERE DIM_1='''+@CountOfABCD+'''
    IF @COUNT>0
    BEGIN
        PRINT PARSENAME("?",2)+''.'' + PARSENAME("?",1)+'' => ''+CONVERT(VARCHAR,@COUNT)+'' ROW(S)''
    END
'
EXEC sp_MSforeachtable @command1=@sql,@whereand='AND O.ID IN (SELECT OBJECT_ID FROM [SERVER].[DATABASE].SYS.COLUMNS C WHERE C.NAME=''DIM_1'')'

如果您可以创建表格,则可以将Print更改为Insert

此外,如果您想在多个服务器上运行它,只需创建多个副本并更改数据库和服务器。

我希望这对至少有一点帮助。我在这里找到了这个答案https://stackoverflow.com/a/9680217/1692632