Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
 Re: HELP!!!!  [new]
Evgen_pust
Member

Откуда:
Сообщений: 20
AlanDenton,

Осталось это

Msg 156, Level 15, State 1, Procedure Stazh, Line 23
Incorrect syntax near the keyword 'FROM'.
27 май 16, 15:52    [19228750]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Evgen_pust, на какой базе? На master :)

Эх... более чем уверен что молодо зелено. Мне помню за такие просчеты на первой работе линейкой по рукам грозили :)
27 май 16, 15:54    [19228763]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Evgen_pust
Member

Откуда:
Сообщений: 20
AlanDenton,

Ну, молодо зелено)

Посмотри, что не так?


CREATE TRIGGER Stazh
ON dbo.PRACIVNYK
AFTER UPDATE
AS BEGIN

SET NOCOUNT ON;

IF UPDATE(Dosvid_rob) BEGIN

UPDATE t
SET
Stazh =
CASE WHEN Dosvid_rob < 3 THEN 0.6
WHEN Dosvid_rob BETWEEN 3 AND 6 THEN 0.8
WHEN Dosvid_rob BETWEEN 7 AND 10 THEN 1
ELSE

FROM dbo.PRACIVNYK
JOIN INSERTED s ON t.ID = s.ID
WHERE t.Dosvid_rob != s.Dosvid_rob

END

END
GO
27 май 16, 15:58    [19228782]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Evgen_pust,

а ELSE что? либо уберите либо допишите
27 май 16, 15:59    [19228792]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Evgen_pust
Member

Откуда:
Сообщений: 20
TaPaK,
ок, убрал
27 май 16, 16:01    [19228802]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
IF OBJECT_ID('dbo.PRACIVNYK', 'U') IS NOT NULL
    DROP TABLE dbo.PRACIVNYK
GO

CREATE TABLE dbo.PRACIVNYK (
    ID INT PRIMARY KEY,
    Dosvid_rob FLOAT NOT NULL,
    Stazh FLOAT
)
GO

CREATE TRIGGER Stazh
    ON dbo.PRACIVNYK
    AFTER UPDATE
AS BEGIN

    SET NOCOUNT ON;

    IF UPDATE(Dosvid_rob) BEGIN

        UPDATE t
        SET Stazh =
            CASE WHEN s.Dosvid_rob < 3 THEN 0.6
                    WHEN s.Dosvid_rob BETWEEN 3 AND 6 THEN 0.8
                    WHEN s.Dosvid_rob BETWEEN 7 AND 10 THEN 1
                    --ELSE t.Stazh
            END
        FROM dbo.PRACIVNYK t
        JOIN INSERTED s ON t.ID = s.ID

    END

END
GO

INSERT INTO dbo.PRACIVNYK VALUES (1, 1, 1)

UPDATE dbo.PRACIVNYK
SET Dosvid_rob = 5

SELECT * FROM dbo.PRACIVNYK
27 май 16, 16:01    [19228807]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
felix_ff
iljy,

Да ну, на 4 строчки кода что ли сильно больше?

слово избыточность есть такое. Зачем нужен триггер на подмену вставки если сама вставка не меняется и никакие доп условия на неё не накладываются...
27 май 16, 16:02    [19228810]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1698
ооо у меня каша в голове явно.
натупил с тригером советчик ((

+ рабочий вариант

if object_id('dbo.test0', 'U') is not null drop table test0
go

create table test0 (
    prc float,
    age int
)
go

insert into test0 (prc, age) values (1.00, 10), (2.00, 50), (3, 10)
go

if object_id('trg0', 'Tr') is not null drop trigger trg0
go

create trigger trg0 on test0 instead of update 
as
set nocount on
if update(prc)
   update tmp
      set prc = i.prc,
          age = d.age + 1
     from test0 tmp
         join deleted d on d.prc = tmp.prc and d.age = tmp.age
         join inserted i on 1=1
else begin
    update tmp
       set [prc] = i.prc,
           [age] = i.age
      from test0 tmp
          join deleted d on d.prc = tmp.prc and d.age = tmp.age
          join inserted i on (UPDATE(prc) or i.prc = tmp.prc) 
                         AND (UPDATE(age) or i.age = tmp.age)
end

go

select * from test0

update test0
  set prc = 4
where prc = 1

select * from test0

update test0
  set prc = 21
where prc = 4

select * from test0

update test0
set age = age + 100
where prc in (21, 3)

select * from test0

go

drop table test0



ТС

CREATE TRIGGER Stazh
 ON dbo.PRACIVNYK
 AFTER UPDATE
AS BEGIN

 SET NOCOUNT ON;

 IF UPDATE(Dosvid_rob)
     UPDATE t
     SET Stazh = CASE
                     WHEN Dosvid_rob < 3 THEN 0.6
                     WHEN Dosvid_rob BETWEEN 3 AND 6 THEN 0.8
                     WHEN Dosvid_rob BETWEEN 7 AND 10 THEN 1
                     ELSE 0.00
                  END
     FROM dbo.PRACIVNYK 
         JOIN INSERTED s ON t.ID = s.ID
     WHERE t.Dosvid_rob != s.Dosvid_rob

END
GO 
27 май 16, 16:04    [19228829]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
TaPaK
Зачем нужен триггер на подмену вставки если сама вставка не меняется и никакие доп условия на неё не накладываются...

Согласен. Тут вычисляемое поле в самый раз:

IF OBJECT_ID('dbo.PRACIVNYK', 'U') IS NOT NULL
    DROP TABLE dbo.PRACIVNYK
GO

CREATE TABLE dbo.PRACIVNYK (
    ID INT PRIMARY KEY,
    Dosvid_rob FLOAT NOT NULL,
    Stazh AS
        CASE
            WHEN Dosvid_rob < 3 THEN 0.6
            WHEN Dosvid_rob BETWEEN 3 AND 6 THEN 0.8
            WHEN Dosvid_rob BETWEEN 7 AND 10 THEN 1
            --ELSE 1.5
        END --PERSISTED
)
GO

INSERT INTO dbo.PRACIVNYK VALUES (1, 1)
SELECT * FROM dbo.PRACIVNYK

UPDATE dbo.PRACIVNYK
SET Dosvid_rob = 5

SELECT * FROM dbo.PRACIVNYK
27 май 16, 16:05    [19228830]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Evgen_pust
Member

Откуда:
Сообщений: 20
AlanDenton,


Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'JOIN'.
27 май 16, 16:05    [19228839]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Evgen_pust
Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'JOIN'.

Command(s) completed successfully.

В общем не верю :)
27 май 16, 16:07    [19228849]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Evgen_pust
AlanDenton,


Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'JOIN'.

на вскидку CASE не закрыт END, алиас на PRACIVNYK, алиасы в CASE на Inserted
27 май 16, 16:12    [19228886]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
TaPaK
на вскидку CASE не закрыт END, алиас на PRACIVNYK, алиасы в CASE на Inserted

Согласен. Поспешил когда первый раз выложил. Но рабочий вариант уже давно приведен.
27 май 16, 16:14    [19228910]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
AlanDenton
TaPaK
на вскидку CASE не закрыт END, алиас на PRACIVNYK, алиасы в CASE на Inserted

Согласен. Поспешил когда первый раз выложил. Но рабочий вариант уже давно приведен.

это и пугает :) что делает ТС ))
27 май 16, 16:15    [19228917]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Evgen_pust
Member

Откуда:
Сообщений: 20
Так а какой вариант окончательный?
27 май 16, 16:28    [19228996]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Evgen_pust
Так а какой вариант окончательный?


— Во-первых, пирожного! Во-вторых… Вы, чего, и пальцы за меня загибать будете?
— Ага!
— Во-вторых, конфет! В-третьих… ну, загибайте, загибайте! А в-третьих, мороженого…


вот 19228807
27 май 16, 16:33    [19229023]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Evgen_pust
Member

Откуда:
Сообщений: 20
TaPaK,
ну у меня просто никакой не работает
27 май 16, 16:35    [19229036]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1698
Evgen_pust,

покажите полность код который запускаете и который не работает. мы можем пальцем по небу водить сколько душе угодно так
27 май 16, 16:36    [19229046]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Evgen_pust
TaPaK,
ну у меня просто никакой не работает

и как не работает написанный уважаемым джентльменом AlanDenton ?
27 май 16, 16:37    [19229048]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Evgen_pust
ну у меня просто никакой не работает

Там же даже пруфф с DML-кой. Если бы не работало меня бы тут уже давно помидорами закидали :)
Покажи что и как Вы выполняете.
27 май 16, 16:40    [19229062]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
AlanDenton
Evgen_pust
ну у меня просто никакой не работает

Там же даже пруфф с DML-кой. Если бы не работало меня бы тут уже давно помидорами закидали :)
Покажи что и как Вы выполняете.

кидаю: надо DELETED а не INSERTED
27 май 16, 16:42    [19229071]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Evgen_pust
Member

Откуда:
Сообщений: 20
AlanDenton,


CREATE TRIGGER Stazh
    ON dbo.PRACIVNYK
    AFTER UPDATE
AS BEGIN

    SET NOCOUNT ON;

    IF UPDATE(Dosvid_rob) BEGIN

        UPDATE t
        SET Stazh =
            CASE WHEN s.Dosvid_rob < 3 THEN 0.6
                    WHEN s.Dosvid_rob BETWEEN 3 AND 6 THEN 0.8
                    WHEN s.Dosvid_rob BETWEEN 7 AND 10 THEN 1
                    --ELSE t.Stazh
            END
        FROM dbo.PRACIVNYK t
        JOIN INSERTED s ON t.ID = s.ID

    END

END
GO

INSERT INTO dbo.PRACIVNYK VALUES (1, 1, 1)

UPDATE dbo.PRACIVNYK
SET Dosvid_rob = 5

SELECT * FROM dbo.PRACIVNYK
27 май 16, 16:43    [19229079]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Evgen_pust
Member

Откуда:
Сообщений: 20
Msg 207, Level 16, State 1, Procedure Stazh, Line 24
Invalid column name 'ID'.

Msg 207, Level 16, State 1, Procedure Stazh, Line 24
Invalid column name 'ID'.

Msg 213, Level 16, State 1, Line 2
Column name or number of supplied values does not match table definition.
27 май 16, 16:44    [19229088]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Evgen_pust
Msg 207, Level 16, State 1, Procedure Stazh, Line 24
Invalid column name 'ID'.

Msg 207, Level 16, State 1, Procedure Stazh, Line 24
Invalid column name 'ID'.

Msg 213, Level 16, State 1, Line 2
Column name or number of supplied values does not match table definition.

да вы издеваетесь :) призывем o-o он умеет угадывать структуры таблиц по названиям...
Подставьте свои таблицы и колонки
27 май 16, 16:46    [19229097]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Konst_One
Member

Откуда:
Сообщений: 11568
ТС хочет готовое решение "под ключ", сам делать ничего не желает и разбираться ,как надо делать , тоже.
27 май 16, 16:47    [19229106]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить