Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / можно ли в SELECT-е в разделе FROM использовать переменные? / 12 сообщений из 12, страница 1 из 1
30.07.2001, 04:54
    #32010618
SergDanceHits
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли в SELECT-е в разделе FROM использовать переменные?
ситуация следующая. у меня есть n SELECT-ов. выбираемые поля, условия выборки, все одинаковое. разные только FROM, данные берутся из разных таблиц, в зависимости от входящих параметров (эти SELECT-ы в StoredProcedure). Я хотел бы из SELECT-ов получить один, что то типа:
\n...
declare @table varchar(20)
if @param = 1 set @table = 'dbo.table1'
if @param = 2 set @table = 'dbo.table2'
...
if @param = n set @table = 'dbo.tableN'

select ...
from @table
where...
...


На ум приходит только через "собрать строчку и через exec(@SQLstring)". но мне не нравится, по моему, еще больший геморой, чем с этими SELECT-ами

нутром чую, что как то можно извратнуться через системные таблицы (ну там через, sysobjects и т.д.), но как, не знаю...

...или через переменные, как я привел для примера выше.

есть у кого идеи?
...
Рейтинг: 0 / 0
30.07.2001, 06:42
    #32010625
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли в SELECT-е в разделе FROM использовать переменные?
в данном случае "нутро" ошибается

Посмотрите функцию sp_executesql - это тот же exec, но туда можно передавать параметры. Может пригодиться.
...
Рейтинг: 0 / 0
30.07.2001, 07:38
    #32010636
MessMaker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли в SELECT-е в разделе FROM использовать переменные?
Указывать таблицу во from через переменную не получится...

Вообще, можно написать такой запрос:

select ...
from (select *
from dbo.table1
where @param = 1
union
select *
from dbo.table2
where @param = 2
union
...
union
select *
from dbo.tableN
where @param = N) t
where <общее условие>

Работать должно быстро.
...
Рейтинг: 0 / 0
30.07.2001, 07:55
    #32010640
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли в SELECT-е в разделе FROM использовать переменные?
А еще можно создать view на основе объединения всех таблиц, если конечно они имеют одинаковую структуру . Тогда можно в запросах использовать не перечень таблиц, а view
...
Рейтинг: 0 / 0
31.07.2001, 04:57
    #32010705
Extravert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли в SELECT-е в разделе FROM использовать переменные?
Да вот как я понял Автор имелл в виду, можно ли запросить типа:

select * from @TableName, а @TableName - множество таблиц, которые не перечислишь в Union'e...

Насколько я знаю, это действительно можно сделать только через EXEC(@SQLstring). А было бы классно напрямую!

А вот еще задачка: нельзя ли в качестве содержимого секции FROM сделать вызов функции,
возвращающей набор записей, типа:

select * FROM (EXEC MyProcedure) ??? Такое бывает?
...
Рейтинг: 0 / 0
31.07.2001, 06:03
    #32010719
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли в SELECT-е в разделе FROM использовать переменные?
2 Extravert
Такое бывает в SQL2000
Там есть функции
...
Рейтинг: 0 / 0
31.07.2001, 08:01
    #32010734
MessMaker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли в SELECT-е в разделе FROM использовать переменные?
2 Glory:

Не совсем понял, что за view ты предлагаешь сделать?
Можно ли пояснить?
...
Рейтинг: 0 / 0
31.07.2001, 08:19
    #32010735
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли в SELECT-е в разделе FROM использовать переменные?
2 MessMaker

Отвечаю заместо Glory
Вид примерно такой:

CREATE SuperView As
select 1 param, *
from dbo.table1
union
select 2,*
from dbo.table2
union
...
union
select n,*
from dbo.tableN

хотя Ваше решение мне тоже понравилось
...
Рейтинг: 0 / 0
01.08.2001, 10:03
    #32010822
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли в SELECT-е в разделе FROM использовать переменные?
зато короче
...
Рейтинг: 0 / 0
01.08.2001, 11:29
    #32010848
SergDanceHits
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли в SELECT-е в разделе FROM использовать переменные?
Extravert
проблема несколько иная. у меня Stored Precedure возвращает некий select, и в зависимости от входящих параметров этот select берется из разных таблиц. Сейчас это реализовано через if @param = 1 ..., т.е. получается большая куча практически одинаковых select-ов, разница только в разделе from. Это работает, но мне не нравится - не очень удобочитаемо. А если мне еще поле какое нибудь нужно в select добавить? Его же надо будет не забыть в каждый select запихнуть . Короче, при редактирования такой процедуры я испытываю дискомфорт. Лень - мать прогресса!!! :D :D :D

SergSuper
А вот насчет функций - это очень интересно! Можно поподробней?

ЗЫ Блин, пора наверно, книжку купить по MSSQL2000
...
Рейтинг: 0 / 0
01.08.2001, 12:32
    #32010876
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли в SELECT-е в разделе FROM использовать переменные?
Пример из БОЛ, надеюсь принцип будет понятен
CREATE FUNCTION LargeOrderShippers ( @FreightParm money )
RETURNS @OrderShipperTab TABLE
(
ShipperID int,
ShipperName nvarchar(80),
OrderID int,
ShippedDate datetime,
Freight money
)
AS
BEGIN
INSERT @OrderShipperTab
SELECT S.ShipperID, S.CompanyName,
O.OrderID, O.ShippedDate, O.Freight
FROM Shippers AS S INNER JOIN Orders AS O
ON S.ShipperID = O.ShipVia
WHERE O.Freight > @FreightParm
RETURN
END

In this function, the local return variable name is @OrderShipperTab. Statements in the function body insert rows into the variable @OrderShipperTab to build the table result returned by the function.

This query references the table returned by the function in its FROM clause:

SELECT *
FROM LargeOrderShippers( $500 )
...
Рейтинг: 0 / 0
01.08.2001, 12:47
    #32010881
MessMaker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли в SELECT-е в разделе FROM использовать переменные?
2 SergSuper

Вариант с view получается медленнее...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / можно ли в SELECT-е в разделе FROM использовать переменные? / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]