Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];

Вниз

SQL. Замучился искать в доках!!! Хелп!!! Можно ли в переменную...   Найти похожие ветки 

 
@andrew   (2002-11-19 17:32) [0]

запихнть имя таблицы и поля? Т.е. select Переменная1(varchar) from Переменная2(varchar) where... и и.д.


 
Val   (2002-11-19 17:35) [1]

где должен работать данный скрипт? какая бд?


 
Asderg   (2002-11-19 17:44) [2]

помнится, читал статью про оракл, где эта проблема расписывалась (ее решение). много было написано.... 8) "...как формировать данные для оператора SELECT программно..."

другие способы поищи.

если есть желание могу по мылу статью выслать.


 
sniknik   (2002-11-19 17:44) [3]

да в любой по моему не дозволительны имена таблиц в параметрах. (если только строку из параметра формировать и в OpenDataSource передавать, можно по моему но только MSSQL)


 
Asderg   (2002-11-19 17:48) [4]

если в дельфях запрос собираешь (строчку), то программно пихай то, что нужно (названия таблиц). имхо проще будет


 
valnech   (2002-11-19 17:51) [5]

SQL.Add(Format(SELECT %s FROM %s WHERE %s = %s,[sVar1, sVar2,sVar3,sVar4]));


 
Val   (2002-11-19 17:57) [6]

>sniknik © (19.11.02 17:44)
не стоит говорить так категорично - про параметры речи не шло, а составить строку запроса можно как в SQL-серверах, поддерживающих динамический SQL(Оракловский EXECUTE IMMEDIATE, например), так и в тексте OP, конкатенируя строки.


 
sniknik   (2002-11-19 18:09) [7]

Val © (19.11.02 17:57)
Автор
>Можно ли в переменную... запихнть имя таблицы и поля?

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


 
Val   (2002-11-19 18:17) [8]

я и говорю, что опять гадаем, что не есть хорошо. а автор на вопросы к нему не отвечает.


 
BlackTiger   (2002-11-19 19:34) [9]

КАААнэчно! В MSSQL.
Для таких вещей есть динамический SQL.
//1 вариант
//---------
Query1.SQL.Clear;
Query1.SQL.Add("EXEC(""SELECT Field1, Field2 FROM "+TableName+""" ORDER BY Field1)")
Query1.Open;

//2-ой вариант
То же самое, но реализуется на сервере через хранимые процедуры или функции.
CREATE PROCEDURE sp_GiveMeSomeData(@table_name varchar(100))
AS
BEGIN
EXEC("SELECT * FROM " + @table_name)
END


 
Andrey Primkulov   (2002-11-20 05:27) [10]

В FibPlus (это конечно для IB/FB/YA) есть такое понятие как макросы(макроподстановки).


 
Sergey13   (2002-11-20 09:45) [11]

2@andrew © (19.11.02 17:32)
>Можно ли в переменную запихнть имя таблицы и поля
Для SQL серверов имя таблицы, ИМХО, нельзя. Имя поля можно, но только в order by секции(так как это в принципе к логике запроса не относится и влияет только на сортировку вывода => обрабатывается после выполнения запроса).
Как примерно происходит обработка запросов на сервере.
1- синтаксический разбор. Если все нормально, то
2- проверка прав доступа. Если нормально, то
3- компиляция запрса. Если нормально, то
4- связывание переменных. Если нормально, то
5- выполнение запроса.

Если имя таблицы в перменной, то п2. невозможен так как привязка произойдет только в п.4 => ошибка.
Если имя поля в переменной, то невозможно выполнить даже п.1.

Выход, ИМХО один, - формирование ПОЛНОЙ строки запроса на клиенте (или в хр.поцедуре). Так что sniknik © прав.


 
pivo_est   (2002-11-21 06:26) [12]

procedure XXX;
var S1,S2: string;
begin
S1:=NNN;
S2:=MMM;
.........
Query1.SQL.Add("SELECT "+S1+"FROM "+S2);
.........
end;


 
@andrew   (2002-12-03 21:00) [13]

Прошу прощения за то, что забросил конференцию, просто и сам понял, что вроде нельзя и сделал другой алгоритм. Речь вообще не шла о Делфи. Мне нужно этот запрос разместить в самом SQL в триггерах. А потому SQL.Add("... и т.д. , ну вы понимаете :-)

А задача была такова:
1. Есть таблицы разные :-)
2. Есть отдельно стоящая таблица:
|| Table_name || KEY_FIELD ||
, где Table_Name имена таблиц пункта 1., а KEY_FIELD - то поле, по которому надо делать select в таблице Table_Name :-)
Вот такая навороченная штука :-) В общем, не так как хотелось бы, но вопрос решил. Огромное Спасибо Всем!


 
BlackTiger   (2002-12-04 02:07) [14]

andrew !!!
Как это нельзя!
-------------------------------------------

BEGIN
DECLARE @sql varchar(2000)
SET @sql = "SELECT * FROM MyTable ORDER BY MyField"
EXEC(@sql)
END

-------------------------------------------

По такому принципу у меня работает crosstab-выборка. Разве это не то? Динамически формируешь запрос и вперед с песнями!


 
BlackTiger   (2002-12-04 02:12) [15]

Если быть точнее, то
----------------------------------------

DECLARE @sql varchar(2000), @table_name varchar(30)
DECLARE @field_name varchar(30)
SET @table_name = "MyTable"
SET @field_name = "MyField"
SET @sql = "SELECT [" + @field_name + "] FROM [" + @table_name + "] ORDER BY [" + @field_name + "]"
EXEC(@sql)
END

----------------------------------------



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.011 c
1-74747
^Sanya
2002-12-14 16:30
2002.12.23
Помогите, пожалуйста предотвратить утечку памяти.


1-74672
Bones
2002-12-13 04:01
2002.12.23
Как установить DelphiXD6?


14-74994
sanilo
2002-12-04 11:21
2002.12.23
W2K


3-74626
XM-AD
2002-12-05 14:40
2002.12.23
В FireBird не срабатывают External вызовы!?


3-74605
sumrak
2002-12-04 15:15
2002.12.23
DBE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский