INSERT
トリガーで更新に関するいくつかの記事を見てきました。私の質問は似ていますが、私はと呼ばれ続ける表を特に理解していないので、UPDATE
の文で私の構文には注意が必要です。SQL Server INSERTトリガーで初期日付の構文を設定する
トリガーコードは、INSERT
の一部の日付列の値のみを更新します(あなたの指導者からここにあるコードのおかげで、'shipdueDate'
列を処理するロジックがあります)。
識別子設定に基づいて請求書番号のインクリメントされた値が既に存在するため、新しい行が作成されると、請求書番号が1つ増えます。ただし、オフィスの管理者にとっては簡単です請求書データを追加するために、orderdate
、shipduedate
、およびdateinvoiced
フィールドに初期値を設定するとデータ入力が簡単になると考えました。
これは私が事前に
CREATE TRIGGER Invoices_SetInitialDates ON dbo.Invoices FOR INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @fromDate DATETIME
DECLARE @shipDate DATETIME
DECLARE @daysToAdd int
-- We promise a 7 day turn-around on orders, so it has to
-- ship on the 8th day
SELECT @fromDate = CURRENT_TIMESTAMP, @DaysToAdd = 8
SET datefirst 1
-- code from stackoverflow to calculate the shipduedate based
-- on week days. It doesn't have any logic for holidays, but it
-- provides the Admin initial values to work with, and that she
-- can change in the new record.
SELECT @shipDate =
DATEADD(day,
@daysToAdd%5 +
CASE DATEPART(weekday,@fromDate) + @daysToAdd%5
WHEN 6 THEN 2
WHEN 7 THEN 1
ELSE 0 END,
DATEADD(week,@daysToAdd/5,@fromDate)
)
-- UPDATE statement for trigger here. I'm not sure
-- here about a table called INSERTED, or if this will
-- simply update the newly added record. This is where
-- I believe I need guidance.
UPDATE dbo.Invoices SET DateOrdered = @fromDate
,ShipDueDate = @shipDate
,DateInvoiced = @fromDate
END
GO
感謝を作ってみたコードです。これは、多くのSQL Serverの才能を持つ素晴らしいサイトです。
- ありがとう:よう
何か。これは、現在の日付だけが必要なフィールドの良い選択肢です。あなたが言うように、shipduedateは計算であり、私はこれらのデフォルト値をすべて1つの場所に格納しておくことを望んでいます。それにもかかわらず、それは感謝しています。これはいくつかのルールを壊すことはないが、あなたがノバスコシアに住んでいる場合は尋ねたがっていますか?私はそこに生まれたからだけ尋ねる。 –
@CliffRobinson:いいえ、私が3年間そこに勤めた後、Bluenoseの国のちょうど大ファンです。私はスイスで生まれ育った(そして現在は生きています) –