#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 , в итоге я использовал этот запрос для извлечения нужной мне таблицы.. Спасибо