Как выбрать имя таблицы из самой таблицы в динамическом режиме? - PullRequest
1 голос
/ 26 декабря 2011

Я хочу выбрать имя таблицы из самой таблицы

например

Select * ,(TableName) from Table1

union

Select *,(TableName) from Table2

я не хочу делать это статично

Select * ,'TableName' as tbl from Table1

union

Select *,'TableName'  as tbl from Table2

заранее спасибо

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

Решение может быть динамичным, но оно намного сложнее, чем ваш первый блок кода там.

Объявите переменную varchar, достаточно большую, чтобы содержать выбранный вами скрипт (например, @script). Объявите курсор для перебора ваших таблиц в таблице sysobjects. Это что-то вроде:

declare cc cursor for select name from sysobjects 
where type='U' and name like '%yourTableNamePatternHere%'
order by name

Просмотрите записи в цикле while, используя fetch next и @@ fetch_status, соберите большой запрос union в @script и, наконец, используйте sp_executesql, чтобы @script выполнялся сервером.

Вот и все. Вот скрипт в одном листинге:

declare @n varchar(100), @script nvarchar(2000)
set @script = ''

declare cc cursor for select name from sysobjects where type='u' and name like '%yourTableNamePatternHere%'
open cc
fetch next from cc into @n

while @@fetch_status = 0
    begin
    if @script <> '' set @script = @script + ' union '
    set @script = @script + 'select <column1>, <column2>, ''' + @n + ''' as tableName from ' + @n 
    fetch next from cc into @n
    end

close cc
deallocate cc

-- print @script
exec sp_executesql @script
1 голос
/ 26 декабря 2011

Вы не можете.

Нет такой функции метаданных, как SELECT OBJECT_NAME(this), которую вы можете использовать.

Бит FROM Table1 является статическим, так в чем же проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...