Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Разбор командной строки  [new]
ICQRobot
Member

Откуда: москва
Сообщений: 164
есть ли в sQL процедура производящая разбор командной строки, например есть формат команды
LIST [HELP|ADD|DEL] [n1,...nn]
надо выделить первый аргумент
и все аргументы перечисленные через запятую
6 янв 06, 13:49    [2232417]     Ответить | Цитировать Сообщить модератору
 Re: Разбор командной строки  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Нет.

А еще SQL не умеет крестиком вышивать и кофе варить.
6 янв 06, 14:23    [2232524]     Ответить | Цитировать Сообщить модератору
 Re: Разбор командной строки  [new]
ICQRobot
Member

Откуда: москва
Сообщений: 164
автор
А еще SQL не умеет крестиком вышивать и кофе варить.


Умеет! у меня домработница из Сенегала я её так и зову Сиквел. :)
6 янв 06, 14:36    [2232549]     Ответить | Цитировать Сообщить модератору
 Re: Разбор командной строки  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
ICQRobot
автор
А еще SQL не умеет крестиком вышивать и кофе варить.


Умеет! у меня домработница из Сенегала я её так и зову Сиквел. :)

+1
6 янв 06, 14:38    [2232557]     Ответить | Цитировать Сообщить модератору
 Re: Разбор командной строки  [new]
S.A.N.
Member

Откуда: Москва
Сообщений: 139
ICQRobot
есть ли в sQL процедура производящая разбор командной строки, например есть формат команды
LIST [HELP|ADD|DEL] [n1,...nn]
надо выделить первый аргумент
и все аргументы перечисленные через запятую


Стандартных процедур или функций в SQL 2000 нет, но можно написать собственную функцию или процедуру используя CHARINDEX или PATINDEX в зависимости от задачи.
6 янв 06, 14:54    [2232620]     Ответить | Цитировать Сообщить модератору
 Re: Разбор командной строки  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
S.A.N.
Стандартных процедур или функций в SQL 2000 нет, но можно написать собственную функцию или процедуру используя CHARINDEX или PATINDEX в зависимости от задачи.

А еще лучше это сделать на клиенте, и не решать на сервере несвойственные ему задачи неудобными методами. Хотя, конечно, дело вкуса...
6 янв 06, 15:00    [2232637]     Ответить | Цитировать Сообщить модератору
 Re: Разбор командной строки  [new]
S.A.N.
Member

Откуда: Москва
Сообщений: 139
GreenSunrise
S.A.N.
Стандартных процедур или функций в SQL 2000 нет, но можно написать собственную функцию или процедуру используя CHARINDEX или PATINDEX в зависимости от задачи.

А еще лучше это сделать на клиенте, и не решать на сервере несвойственные ему задачи неудобными методами. Хотя, конечно, дело вкуса...


Практика показывает что часто клиентские машины дохлые (особенно на складах), поэтому предпочитаю максимально использовать возможности сервера. Хотя разбор командной строки действительно лучше произвести на клиенте и выполнить, но вот построение функцией LongName по HistoryID (1.12.233.) для деревьев с помощью CHARINDEX делал.
6 янв 06, 15:47    [2232756]     Ответить | Цитировать Сообщить модератору
 Re: Разбор командной строки  [new]
ICQRobot
Member

Откуда: москва
Сообщений: 164
Так и есть пишу сам...
разбор командной строки на SQL выбран по причине того, что клиетская часть послностью "тупая". Всё что принимает передает серверу и отображает только результат работы сервера.
8 янв 06, 13:35    [2235412]     Ответить | Цитировать Сообщить модератору
 Re: Разбор командной строки  [new]
Брюлик
Member

Откуда:
Сообщений: 690
IF OBJECT_ID('dbo.TsqlSplit') IS NOT NULL
DROP FUNCTION dbo.TsqlSplit
GO

CREATE FUNCTION dbo.TsqlSplit
(@List As varchar(8000))
RETURNS @Items table (Item varchar(8000) Not Null)
AS
BEGIN
DECLARE @Item As varchar(8000), @Pos As int
WHILE DATALENGTH(@List)>0
BEGIN
SET @Pos=CHARINDEX(',',@List)
IF @Pos=0 SET @Pos=DATALENGTH(@List)+1
SET @Item = LTRIM(RTRIM(LEFT(@List,@Pos-1)))
IF @Item<>'' INSERT INTO @Items SELECT @Item
SET @List=SUBSTRING(@List,@Pos+DATALENGTH(','),8000)
END
RETURN
END
GO

/* Usage example */
SELECT t1.*
FROM TsqlSplit('10428,10429') AS t1


declare @inList varchar(50)
set @inList='10428,10429'

select od.* from [order details] od
INNER JOIN
(SELECT Item
FROM dbo.TsqlSplit(@InList)) As t
ON od.orderid = t.Item
8 янв 06, 14:51    [2235500]     Ответить | Цитировать Сообщить модератору
 Re: Разбор командной строки  [new]
ICQRobot
Member

Откуда: москва
Сообщений: 164
to Брюлик
Спасибо за ваш код. Вопрос закрыт.
9 янв 06, 10:06    [2236541]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить