Подсобите с триггером?
От: Grog13 Финляндия  
Дата: 16.07.09 12:07
Оценка:
Привет.

Досталась в наследство некая система управления счетами.
И там так хитро сделано, что номера заказов (если они есть), к которому относиться конкретный счет, пишутся в текстовое поле подряд через запятую.

Invoice: 504331
Orders: 10001, 10002, 10003

ну и понятное дело их может быть сколько угодно.

Я хочу сделать табличку-хелпер вида: INT InvoiceID, INT OrderID, куда записывать эти номера в цивилизованной форме.
Для данного примера это было бы 3 строчки:
504331 10001
504331 10002
504331 10003


Как я понимаю, надо повесить триггер на оригинальную табличку, и при разных действиях Insert, update, delete надо в таблице-хелпере соответственно менять на актуальные данные.
Разделитель заказа — запятая. Может быть с пробелом, может быть без него.

В правильном направлении ли я думаю и как написать такой триггер?
База MS SQL 2000

Заранее спасибо.
Re: Подсобите с триггером?
От: Grog13 Финляндия  
Дата: 16.07.09 12:35
Оценка:
Конкретные трудности у меня с переводом строки вида "30003, 344034, 234234"
в 3 отдельных числа, что бы сделать 3 раза INSERT.

Могу ли я как-нибудь написать логику триггера на C#?
Re[2]: Подсобите с триггером?
От: Sshur Россия http://shurygin-sergey.livejournal.com
Дата: 16.07.09 12:50
Оценка: 4 (1)
Здравствуйте, Grog13, Вы писали:

G>Конкретные трудности у меня с переводом строки вида "30003, 344034, 234234"

G>в 3 отдельных числа, что бы сделать 3 раза INSERT.

G>Могу ли я как-нибудь написать логику триггера на C#?


Во-первых, кажется вот здесь Массивы и списки в sql такой вопрос среди прочих и рассматривается.

Во-вторых, можно написать незамысловатый код на tsql для парсинга строки. Вот мой случай,правда некогда переименовывать переменные — смысл в том что в процедуру приходит строка @требованияКМашине, где отдельные коды перечислены через ';'. Можете видоизменить для вашего случая.

declare @кодТребования int;
declare @позицияТЗП int
while(len(@требованияКМашине)>0)
begin
   set @позицияТЗП =    charindex(';',@требованияКМашине);

   if (@позицияТЗП = 0)
       set @позицияТЗП = len(@требованияКМашине)+1

   if(isnumeric(substring(@требованияКМашине, 1, @позицияТЗП-1))=1)
   begin
    set @кодТребования = substring(@требованияКМашине, 1, @позицияТЗП-1)

    exec Вставить_заказы_требования_рабочая @кодЗаказа = @кодЗаказа, @кодТребования = @кодТребования
   end
   else
     set @кодТребования = null;

  if @позицияТЗП<len(@требованияКМашине)
      set @требованияКМашине = substring(@требованияКМашине, @позицияТЗП+1,len(@требованияКМашине)-@позицияТЗП);
  else 
       break;
end



Ну, а в третьих — на C# собственно парсинг строки делается вызовом одного метода String, но геморроя с вызовом sql потом из процедуры будет больше, поэтому я бы выбрал вариант на TSQL. И, кажется вы упоминали что сервер у вас 2000 — значит юзать CLR вы не можете
Шурыгин Сергей

"Не следует преумножать сущности сверх необходимости" (с) Оккам
Re: Подсобите с триггером?
От: Mr.Cat  
Дата: 16.07.09 15:46
Оценка:
А не получится ли сделать вьюху, в которой парсится строка парсится и разбивается в итоге на несколько?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.