Изучаю SQL Server 2000
От: vasily_xp  
Дата: 29.11.02 06:44
Оценка:
Я только начинаю разбираться в данной теме, тыкаюсь по хелпам и т. д. Столкнулся со следующей проблемой:
В базе данных имеются таблицы, которые именуются CH01, CH02, ... CH99. Ряд может быть не полным. Имеется также таблица CHET, в которой описаны номера таблиц, присутствующих в указанном ряду.
Каким образом можно подставить во вложенный запрос после ключевого слова FROM выражение, результатом которого должно быть имя таблицы. Возможно вы подскажете какой-то другой способ.
В результате должно получиться что-то вроде
Select ..., (Select top 1 ... from <выражение с участием полей из table1> ) AS ... FROM table1

Извините, если слишком ламерский подход. Я не волшебник, я только учусь.
С уважением, Василий. (E-mail:vvorobyov@tut.by)
Re: Изучаю SQL Server 2000
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 29.11.02 06:52
Оценка:
Здравствуйте, vasily_xp, Вы писали:

[]

VX>В результате должно получиться что-то вроде

VX>Select ..., (Select top 1 ... from <выражение с участием полей из table1> ) AS ... FROM table1


DECLARE @sql varchar(1000)
DECLARE @tableName varchar(50)
SET @tableName = 'SomeTable'
SET @sql = 'Select top 1 ... from ' + @tableName + ' ) AS ... FROM table1'
EXEC (@sql)
Re: Изучаю SQL Server 2000
От: DemAS http://demas.me
Дата: 29.11.02 07:37
Оценка:
Здравствуйте, vasily_xp, Вы писали:

VX>В базе данных имеются таблицы, которые именуются CH01, CH02, ... CH99. Ряд может быть не полным. Имеется также таблица CHET, в которой описаны номера таблиц, присутствующих в указанном ряду.

VX>Каким образом можно подставить во вложенный запрос после ключевого слова FROM выражение, результатом которого должно быть имя таблицы. Возможно вы подскажете какой-то другой способ.
VX>В результате должно получиться что-то вроде
VX>Select ..., (Select top 1 ... from <выражение с участием полей из table1> ) AS ... FROM table1

В дополнение к ответу Flamer

Ты уверен, что база должна быть организованна именно таким образом ?

В качестве варианта могу предложить следующее — слей свои таблицы ch01..ch99 в одну, допустим сh. Структура у ch такая же как и у ch01..ch99 + одно дополнительное поле, например number в котором у тебя будут храниться числа 01..99.

Тогда для того чтобы получить данные, кторые раньше были скажем в ch50 будет достаточно сказать так:

select * from ch where numver = 50.

При небольших запросах разница между этим вариантом и exec не так заметна, но если у тебя пойдуи более сложные запросы с EXEC'ом ты намучаешься.

Удачи
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.