![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
LIKE и хранимая процедура [D7, MSSQL]
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 + "%"