2014-08-04 5 views
2

Я должен использовать часть программного обеспечения, которое после запуска анализа создает таблицу с уникальным идентификатором ссылки. Чтобы получить доступ к этим результатам через SQL, это боль, поэтому я создаю шаблон, чтобы пользователи могли легко передавать результаты в Excel.Имя таблицы как переменная

Проблема заключается в том, что имя таблицы постоянно меняется. Есть ли способ сделать:

Select * From <variable> 

возможно?

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

+1

Что RDMS вы используете? (Mssql, oracle, MySQL) – Arion

ответ

1

Можно с динамическим SQL, например, для T-SQL это выглядит как

declare @tablename varchar(max), 
     @sql varchar(max) 
set @tablename = 'tableName' 
set @sql = 'Select * From '[email protected] 

exec(@sql) 
+0

Привет, Parado, Большое спасибо за быстрый ответ. Я пытаюсь выполнить ваш ответ, но @Tablename не работает. Вы знаете, если это невозможно в динамическом SQL? 'DECLARE @TABLE_NAME NVARCHAR (макс), @SQL NVARCHAR (макс) SET @TABLE_NAME = 'SELECT result_id FROM #TmpResult WHERE ResultsSetName = '' Компания A' '' SET @SQL = 'Select * From' + @ Таблица_Name EXEC @Table_Name EXEC (@SQL) ' – Carlos80

+0

Здесь' SET @Table_Name = 'SELECT Result_ID FROM #TmpResult WHERE ResultsSetName =' 'Company A' '' 'вы устанавливаете целое выражение select, а не имя таблицы. Вы должны установить здесь имя таблицы, например SET '@Table_Name = 'Salary'' или из запроса' select @Table_Name = name from table ... ' – Parado

+0

Спасибо Parado, я думаю, что это должно быть что-то делать с цитатами, m по-прежнему получает ошибку '(затронуты 1 строка) Msg 156, Level 15, State 1, Line 1 Неверный синтаксис рядом с ключевым словом« SELECT ». – Carlos80

3

Да, это называется Dynamic SQL:

SQL Server

DECLARE @sql AS VARCHAR(MAX) 
SET @sql = 'Select * From ' + @yourTableNameVariable 
EXEC(@sql) 

ORACLEsource

sql_stmt := 'Select * From ' || yourTableNameVariable; 
EXECUTE IMMEDIATE sql_stmt; 

MySQLsource

SET @s = CONCAT('SELECT * FROM ',@yourTableNameVariable); 
PREPARE stmt FROM @s; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

Отказ Я опытный только в SQL Server. Другими примерами являются модификации кода, найденного, как определено в [источник] рядом с именем двигателя БД.

+0

Предполагая, что OP использует MSSQL – Arion

+1

@Arion Вы правы, поэтому я добавил образцы двух других основных механизмов БД. Я надеюсь, что OP не использует FireBird ... –

Смежные вопросы