Я только начинаю разбираться в данной теме, тыкаюсь по хелпам и т. д. Столкнулся со следующей проблемой:
В базе данных имеются таблицы, которые именуются CH01, CH02, ... CH99. Ряд может быть не полным. Имеется также таблица CHET, в которой описаны номера таблиц, присутствующих в указанном ряду.
Каким образом можно подставить во вложенный запрос после ключевого слова FROM выражение, результатом которого должно быть имя таблицы. Возможно вы подскажете какой-то другой способ.
В результате должно получиться что-то вроде
Select ..., (Select top 1 ... from <выражение с участием полей из table1> ) AS ... FROM table1
Извините, если слишком ламерский подход. Я не волшебник, я только учусь.
С уважением, Василий. (E-mail:vvorobyov@tut.by)
Здравствуйте, 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)
Здравствуйте, 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'ом ты намучаешься.
Удачи