Привет.
Досталась в наследство некая система управления счетами.
И там так хитро сделано, что номера заказов (если они есть), к которому относиться конкретный счет, пишутся в текстовое поле подряд через запятую.
Invoice: 504331
Orders: 10001, 10002, 10003
ну и понятное дело их может быть сколько угодно.
Я хочу сделать табличку-хелпер вида: INT InvoiceID, INT OrderID, куда записывать эти номера в цивилизованной форме.
Для данного примера это было бы 3 строчки:
504331 10001
504331 10002
504331 10003
Как я понимаю, надо повесить триггер на оригинальную табличку, и при разных действиях Insert, update, delete надо в таблице-хелпере соответственно менять на актуальные данные.
Разделитель заказа — запятая. Может быть с пробелом, может быть без него.
В правильном направлении ли я думаю и как написать такой триггер?
База MS SQL 2000
Заранее спасибо.
Здравствуйте, 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 вы не можете
А не получится ли сделать вьюху, в которой парсится строка парсится и разбивается в итоге на несколько?