それが可能な唯一の方法は、動的 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