Имя таблицы в запросе как переменная?
От: Pavel B  
Дата: 13.03.02 08:31
Оценка:
MSSQL
В БД есть несколько одинаковых по структуре таблиц отличающихся только названием.
Есть хранимая процедура, в которую передаются параметры и имя таблицы, с которой быдут производится действия.
Запрос примерно такой:


.....

DECLARE @CompanyProfiles varchar(800),
DECLARE @CompanyDescription text
DECLARE @ObjectName Varchar(100)

SELECT @ObjectName = 'dbo.Company'


INSERT INTO что-то = @ObjectName
(CompanyProfiles, CompanyDescription)
VALUES(@CompanyProfiles, @CompanyDescription)
....


Преобразование в строку запроса INSERT в данном случае не проходит.
Re: Имя таблицы в запросе как переменная?
От: Zar Россия  
Дата: 13.03.02 08:53
Оценка:
Здравствуйте Pavel B, Вы писали:

PB> MSSQL

PB>В БД есть несколько одинаковых по структуре таблиц отличающихся только названием.
PB>Есть хранимая процедура, в которую передаются параметры и имя таблицы, с которой быдут производится действия.
PB>Запрос примерно такой:

PB>

PB>.....

PB>DECLARE @CompanyProfiles varchar(800),
PB>DECLARE @CompanyDescription text
PB>DECLARE @ObjectName Varchar(100)

PB>SELECT @ObjectName = 'dbo.Company'


PB>INSERT INTO что-то = @ObjectName
PB>(CompanyProfiles, CompanyDescription)
PB>VALUES(@CompanyProfiles, @CompanyDescription)
PB>....
PB>


PB>Преобразование в строку запроса INSERT в данном случае не проходит.
[ Zarathustra ]
Re: Имя таблицы в запросе как переменная?
От: Zar Россия  
Дата: 13.03.02 08:54
Оценка: 1 (1)
Здравствуйте Pavel B, Вы писали:

PB> MSSQL

PB>В БД есть несколько одинаковых по структуре таблиц отличающихся только названием.
PB>Есть хранимая процедура, в которую передаются параметры и имя таблицы, с которой быдут производится действия.
PB>Запрос примерно такой:
PB>.....

Попробуй так:

DECLARE @CompanyProfiles varchar(800),
DECLARE @CompanyDescription text
DECLARE @ObjectName Varchar(100)

SELECT @ObjectName = 'dbo.Company'

EXEC ('INSERT INTO '
    + @ObjectName 
    +' (CompanyProfiles, CompanyDescription) '
    +'VALUES(@CompanyProfiles, @CompanyDescription)')
[ Zarathustra ]
Re[2]: Имя таблицы в запросе как переменная?
От: Lexey Россия  
Дата: 13.03.02 10:40
Оценка:
Здравствуйте Zar, Вы писали:

Zar>
Zar>DECLARE @CompanyProfiles varchar(800),
Zar>DECLARE @CompanyDescription text
Zar>DECLARE @ObjectName Varchar(100)

Zar>SELECT @ObjectName = 'dbo.Company'

Zar>EXEC ('INSERT INTO '
Zar>    + @ObjectName 
Zar>    +' (CompanyProfiles, CompanyDescription) '
Zar>    +'VALUES(@CompanyProfiles, @CompanyDescription)')
Zar>


А еще лучше написать на каждую таблицу свою хранимую процедуру (сделать скрипт, который их генерирует). И вызывать нужную прямо из приложения. Просто в таком варианте польза от хранимой процедуры стремится к нулю.
Re: Имя таблицы в запросе как переменная?
От: beginner Россия  
Дата: 13.03.02 10:45
Оценка:
Здравствуйте Pavel B, Вы писали:

PB> MSSQL

PB>В БД есть несколько одинаковых по структуре таблиц отличающихся только названием.
PB>Есть хранимая процедура, в которую передаются параметры и имя таблицы, с которой быдут производится действия.
PB>Запрос примерно такой:

PB>

PB>.....

PB>DECLARE @CompanyProfiles varchar(800),
PB>DECLARE @CompanyDescription text
PB>DECLARE @ObjectName Varchar(100)

PB>SELECT @ObjectName = 'dbo.Company'


PB>INSERT INTO что-то = @ObjectName
PB>(CompanyProfiles, CompanyDescription)
PB>VALUES(@CompanyProfiles, @CompanyDescription)
PB>....
PB>


PB>Преобразование в строку запроса INSERT в данном случае не проходит.


Как я понял вам нужен динамический запрос. Это отлично описал уважаемый Glory здесь:
http://www.sql.ru/cgi-bin/UltraBoard/UltraBoard.pl?Action=ShowPost&Board=mssql&Post=4156&Idle=365&Sort=0&Order=Descend&Page=0&Session=
__________________
per aspera ad astra
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.