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

Откуда:
Сообщений: 13
Триггер работает нормально только с первой строкой

ALTER TRIGGER autokor ON test
   FOR INSERT,UPDATE
AS 
BEGIN
SET NOCOUNT ON
DECLARE @C_Number VARCHAR(50) 
SET @C_Number = (SELECT testt FROM test)
DECLARE @Pred VARCHAR(3)
DECLARE @Numeric VARCHAR(4)
DECLARE @Post VARCHAR(50)

SELECT @Pred= UPPER(left(@C_Number,PATINDEX('%[0-9]%',@C_Number)-1)), @C_Number = SUBSTRING(@C_Number,PATINDEX('%[0-9]%',@C_Number),50) 
SELECT @Numeric= left(@C_Number,PATINDEX('%[^0-9]%',@C_Number)-1), @Post = SUBSTRING(@C_Number,PATINDEX('%[^0-9]%',@C_Number),50) 
SELECT @Pred = @Pred + '-' WHere @Pred not like '%-' 

SELECT @Pred,@Numeric,@Post

if @Pred not like '[A-ZА-Я]-' and @Pred not like '[A-ZА-Я][A-ZА-Я]-'
begin
   SET @Pred = ''
End 

if @Post = NULL
begin
   SET @Post = ''
End 

if len(@Numeric)>4 or len(@Numeric)=0
begin
   SET @Numeric = '0000'
End 

if @Post not like '%[^A-Za-zА-Яа-я0-9]%'
begin
   SET @Post = ''
End 

SET @C_Number = @Pred + right('0000'+@Numeric,4) + @Post

UPDATE test SET testt = @C_Number FROM test WHERE test.id = test.id
END


Но на 2 строку он выдает ошибку (см. ниже)
я так понял что проблема в строке
UPDATE test SET testt = @C_Number FROM test WHERE test.id = test.id

т.к. он начинает пытается обработать ВСЕ строки а не ту которые я добавляю или изменяю
как правильно указать в WHERE именно ту строку с которой я работаю?

К сообщению приложен файл. Размер - 19Kb
19 дек 19, 00:34    [22043759]     Ответить | Цитировать Сообщить модератору
 Re: Выбор строки  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36905
Модератор: Темы плодить не надо. Достаточно исходной: https://www.sql.ru/forum/1320410/ogranicheniya-i-regulyarnye-vyrazheniya
19 дек 19, 00:38    [22043764]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить