2013-08-27 2 views
0

Никогда не записывал триггер раньше.SQL Server INSERT/UPDATE Строка даты конкатенации триггера

Нужно иметь триггер для вставки и обновления, который проверяет дату, и если день больше 25-го, устанавливает эту дату на 25-е число этого месяца.

Прямо сейчас я пытаюсь создать @newDate, и я не уверен, как это сделать.

Текущий код:

CREATE TRIGGER [dbo].[setASDate] 
    ON [dbo].[AutoShip] 
    AFTER UPDATE, INSERT 
AS 
BEGIN 
-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
SET NOCOUNT ON; 

DECLARE @DistID INT; 
DECLARE @date INT; 
DECLARE @month INT; 
DECLARE @year INT; 

IF UPDATE(DateNextShipment) 
BEGIN 
    DECLARE @newDate datetime; 

    SELECT TOP 1 @DistID = DistID FROM INSERTED 
    SELECT TOP 1 @date = DATEPART(d, DateNextShipment) FROM INSERTED 
    SELECT TOP 1 @month = CONVERT(varchar(2),DATEPART(mm, DateNextShipment)) FROM INSERTED 
    SELECT TOP 1 @year = CONVERT(varchar(4),DATEPART(yyyy, DateNextShipment)) FROM INSERTED 
    @newDate = CONVERT(datetime,@year + '-' + @month + '-25') 

    If @date > 25 
    BEGIN  
     UPDATE AutoShip 
     SET DateNextShipment = @newDate, Day = 25 
     WHERE DistID = @DistID 
    END  
END 
END 

EDIT - Обновлен код

ответ

1

Объявите переменные @date и @month типа VARCHAR, а затем использовать его как:

SELECT TOP 1 @date = DATEPART(d, DateNextShipment) FROM INSERTED 
SELECT TOP 1 @year= convert(varchar(4),DATEPART(yyyy, DateNextShipment)) FROM INSERTED 
SELECT TOP 1 @month = convert(varchar(2),DATEPART(mm, DateNextShipment)) FROM INSERTED 
@newDate = convert(datetime,@year+'-'[email protected]+'-'+'25') 
+0

Выглядит хорошо, но я 'm по-прежнему получает «неподходящий синтаксис рядом с ошибкой @newDate». Спасибо за помощь. – Silverwulf

+0

На самом деле, сейчас это работает как шарм. Еще одна мелочь, которую мне нужно было изменить. k вас. – Silverwulf