Головна сторінка
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
ПОЧАТИ
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;
починати
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 !!!
Як це не можна!
-------------------------------------------

ПОЧАТИ
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.61 MB
Час: 0.031 c
3-74595
b_baranov
2002-12-04 02:34
2002.12.23
Як перехопити занесення в базу записи, що містить Null-значення


14-74893
АК-74
2002-12-04 13:23
2002.12.23
Ті, що говорять програми


1-74836
Лені
2002-12-11 13:45
2002.12.23
Створення свого значка


14-74963
aterm
2002-12-03 10:14
2002.12.23
Комилятор для С++


6-74871
Мікель
2002-09-04 20:09
2002.12.23
скачати





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в'єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська