1

重複の可能性:
テーブル名が変数にある場合、テーブル内の行数を見つけるにはどうすればよいですか?

列に 1 つの値を含む SQL Server データベース (2000) 内のテーブルを検索する必要があります。

次のクエリを使用して、次を含む候補テーブルのリストを出力できますmy_column

SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'my_column'

私が取得したいのは、結果を含む次の疑似クエリです。

select '$TABLE_NAME', count(*) from $TABLE_NAME where my_column = '12345'

table01 1
table02 5
table03 0
table04 3

または、より一般的に定式化された: FROM句を変数にすることは可能ですか?

4

3 に答える 3

3

それが可能な唯一の方法は、動的 SQL を使用することです。

declare @stmt nvarchar(max), @value nvarchar(max)

select @stmt = isnull(@stmt + ' union all ', '') + '
    select ''' + TABLE_NAME +  ''', count(*) from ' +  TABLE_NAME + ' where my_column = @value' 
from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME = 'my_column'

select @value = '12345'

exec sp_executesql
    @stmt = @stmt,
    @params = N'@value nvarchar(max)',
    @value = @value

更新:
SQL 2000 の場合nvarchar(4000)、使用できるテーブルの数が非常に多い場合は、一時テーブル + カーソルを使用できます。

create table #Temp_Results (table_name nvarchar(128), cnt int)
declare @stmt nvarchar(4000), @value nvarchar(128)

declare t_cursor cursor local fast_forward for
    select 
        'select ''' + TABLE_NAME +  ''', count(*) from ' +  TABLE_NAME + ' where id = @value'
    from INFORMATION_SCHEMA.COLUMNS
    where COLUMN_NAME = 'name'

select @value = 1

open t_cursor
fetch t_cursor into @stmt
while @@fetch_status = 0
begin
    insert into #Temp_Results
    exec sp_executesql
        @stmt = @stmt,
        @params = N'@value nvarchar(128)',
        @value = @value

    fetch t_cursor into @stmt
end

close t_cursor
deallocate t_cursor

select * from #Temp_Results
于 2012-11-29T16:39:54.350 に答える
0

質問を理解した場合、特定の列名と各テーブルのレコード数を含むテーブルのリストが必要です。もしそうなら

select o.name as "Table Name", i.rowcnt as "Rows"
from sysobjects o
inner join sysindexes i on o.id = i.id
where i.indid in (0,1)
and o.id in
    (select distinct id from syscolumns where name = 'My_Column')
order by o.name

システムテーブルをクエリする機能が必要です。

于 2012-11-29T19:36:32.603 に答える
0

sp_MSforeachtableのドキュメント化されていないストアドプロシージャを使用して、FROM句を変数にすることができます。これを使用する方法を示す記事は次のとおりです。sp_msForEachTableの例

于 2012-11-29T16:57:21.907 に答える