Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

LIKE и хранимая процедура [D7, MSSQL]


Страницы:   1 2

Dp ©   (2003-11-28 12:56:00) 

Добрый день. Как правильно составить SQL-запрос на создание хранимой процедуры типа:

StrSql:="CREATE PROCEDURE IdRequery @ClientID char(20) "+
"AS "+
"SELECT * FROM Klients WHERE (Cli_id LIKE %@ClientID%)";

Каков правильный синтаксис? Как необходимо: "%@ClientID%" или по другому? Если можно, с расстановкой апострофов!!! Уже запутался. При запросе с клиентской части пишу:
StrSql:="SELECT * FROM Klients WHERE (Cli_id LIKE """+"%"+Edit1.Text+"%"+""")";

и все работает правильно.


Shirson   (2003-11-28 15:48:00) [21]


StrSql:="CREATE PROCEDURE IdRequery @ClientID char(20) "+
"AS "+
"SELECT * FROM Klients WHERE (Cli_id LIKE "+quotedstr("%")+"+@ClientID+"+quotedstr("%")+")";
Вызов:

StrSql:="EXECUTE IdRequery "+quotedstr("%"+Edit1.Text+"%");


Теперь вопрос на засыпку. На кой нужно ставить wildchars И в сторедной процедуре И в клиентской части?

Вызов достаточно осуществлять так:

StrSql:="EXECUTE IdRequery "+quotedstr(Edit1.Text);

проценты сама сторедная процедура поставит.

И вообще, переходи на использование Parameters, чтобы огород из апострофов не городить и не путаться.


Dp   (2003-11-28 15:34:00) [22]

Так получилось.... Разумеется, можно воспользоваться средствами Enterprise Manager-а. Но вопрос не в этом, а в моем предпредпоследнем посте. А процедуру можно создать хоть где - резалт один!


Val   (2003-11-28 15:07:00) [23]

>Dp (28.11.03 14:44) [9]
даже если очень непростой, зачем создаете процедуру из клиентского приложения??


Dp   (2003-11-28 14:44:00) [24]

SELECT будет не простой :).


Nikolay M.   (2003-11-28 14:35:00) [25]

А если не секрет, зачем для простого селекта городить ХП?


Dp   (2003-11-28 14:12:00) [26]

Короче, что-то искаться начинает при таком раскладе:

StrSql:="CREATE PROCEDURE IdRequery @ClientID char(20) "+
"AS "+
"SELECT * FROM Klients WHERE (Cli_id LIKE @ClientID)";

Вызов: StrSql:="EXECUTE IdRequery """+"%"+Edit1.Text+"%"+"""";

Но число записей по сравнению с вариантом:
StrSql:="SELECT * FROM Klients WHERE (Cli_id LIKE """+"%"+Edit1.Text+"%"+""")";

РАЗЛИЧАЕТСЯ!


b0bi   (2003-11-28 14:04:00) [27]

StrSql:="CREATE PROCEDURE IdRequery @ClientID char(20) "+
"AS "+
"SELECT * FROM Klients WHERE (Cli_id LIKE """+"%"+@ClientID+"%"+""")";


Dp   (2003-11-28 13:35:00) [28]

Только теперь, при вызове из клиентской части ничего не находит, хотя записи есть:

StrSql:="EXECUTE IdRequery 123"; или
StrSql:="EXECUTE IdRequery "123""; или еще как - ему по барабану!

Наставьте начинающего на путь истинный!


Dp   (2003-11-28 13:20:00) [29]

Съедает вот что:
StrSql:="CREATE PROCEDURE IdRequery @ClientID char(20) "+
"AS "+
"SELECT * FROM Klients WHERE (Cli_id LIKE """+"%"+"""+@ClientID+"""+"%"+""")";


Dp   (2003-11-28 13:12:00) [30]

2 clickmakeк & bon
На предложенный Вами вариант ругается: [Error] Unit1.pas(66): Illegal character in input file: "%" ($25)


bon   (2003-11-28 13:08:00) [31]

StrSql:="CREATE PROCEDURE IdRequery @ClientID char(20) "+
"AS "+
"SELECT * FROM Klients WHERE (Cli_id LIKE "%"+@ClientID+"%")";


clickmaker   (2003-11-28 13:06:00) [32]

"%" + @ClientID + "%"


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо