Как получить имя таблицы из имени переменной БД? ( SQL)

#sql #tsql

#sql #tsql

Вопрос:

Как получить имя таблицы из имени переменной БД? ( SQL)

У меня есть переменная для извлечения имени базы данных на основе среды БД. Передавая DBName, мне нужно получить имена таблиц.

Как извлечь имена таблиц из имени базы данных, присвоенного переменной.

 Declare @DBName nvarchar(1000)

set @DBName = ( select
CASE WHEN @@SERVERNAME='MyProdServer' THEN 'MyDB_Production'     
           WHEN @@SERVERNAME='MyTestServer' THEN 'MyDB_Test'
        ELSE '(Unknown)' End  as DBName )


select * from @DBName.dbo.MyTestTable
  

Комментарии:

1. Вы спрашиваете, как использовать представления информационной схемы для получения имен таблиц из конкретной базы данных?

Ответ №1:

Вам нужно немного динамического SQL

 Declare @script varchar(max)

Set @script = 'select name from '    @dbname   '.sys.tables'

exec(@script)
  

или вы можете использовать

 SELECT TABLE_CATALOG
     , TABLE_SCHEMA
     , TABLE_NAME
     , TABLE_TYPE
  FROM INFORMATION_SCHEMA.TABLES where table_catalog=@dbname
  

чего вы не можете сделать, так это переключиться на таблицу, если вы не продолжаете использовать динамический sql:

 Set @script - 'select * from #   @dbname   '.dbo.mytesttable'
Exec (@script)
  

Я использовал другой метод, чтобы обойти это, который заключается в сохранении скрипта, который я хочу запустить, в таблице с использованием заполнителя.

 CREATE myscripts as table (script varchar(max), upk int)

INSERT INTO myscripts
Select 'Select * from #10#.dbo.mytable', 1


Set @script=(Select script from mytable where upk=1)
Set @script=REPLACE(@script,'#10#', @dbname)

Exec(@script)
  

Комментарии:

1. это мне не поможет. У меня тот же синтаксис. Проблема в том, что мне нужно извлечь определенную таблицу из переменной. Другими словами, динамически нам нужно переключаться на БД .. использовать dbname

2. Совет: Наилучшей практикой при сборке имен объектов в динамические инструкции SQL является использование, QuoteName() чтобы избежать проблем со странными именами, например, New Table с пробелом или зарезервированными словами типа From .

3. @goofyui, тогда ваша постановка проблемы не ясна. Это отвечает на вопрос, как «извлекать имена таблиц из имени базы данных, присвоенного переменной».

4. Спасибо HABO — это полезный совет.

5. этот запрос .. полезен .. ИЗ INFORMATION_SCHEMA. ТАБЛИЦЫ, где table_catalog=@dbname , в итоге я использовал этот запрос для извлечения нужной мне таблицы.. Спасибо