フォーラムを見回しましたが、私の質問に正確に一致するものは見つかりませんでした。このクエリは、従業員の定期的な休日を追加することになっています。PL_ID 変数を除外し、主キーのないテーブルがある場合、コードは case ステートメントで定義された正しい休日を追加します。これはテスト テーブルにありますが、25,000 エントリを超えるテーブルに追加する必要があります。
テーブルには、PL_ID、Log_Date、Out_Time、In_Time が含まれます
私は現在、このコードを持っています:
DECLARE @StartDate DateTime
DECLARE @EndDate DateTime
DECLARE @DateVar DateTime
DECLARE @PL_ID int
SET @StartDate = '1/10/2012'
SET @EndDate = '1/11/2012'
SET @DateVar = @StartDate
SET @PL_ID = 0
WHILE @DateVar <= @EndDate
BEGIN
INSERT INTO Logger_test2(PL_ID,Log_Date,In_Time,Out_Time)
SELECT @PL_ID,@DateVar,
CASE WHEN DATENAME(dw,@DateVar) = 'Thursday' THEN '9'
WHEN DATENAME(dw,@DateVar) = 'Monday' THEN '12'
END AS In_Time,
CASE WHEN DATENAME(dw,@DateVar) = 'Thursday' THEN 'After 5'
WHEN DATENAME(dw,@DateVar) = 'Monday' THEN 'After 5'
END AS Out_Time
WHERE DATENAME(dw,@DateVar) IN ('Thursday','Monday')
SET @DateVar = DATEADD(d,1,@DateVar)
UPDATE Logger_test2 set @PL_ID = PL_ID = @PL_ID +1
END
このコードでは、最大の PL_ID を持つテーブルに 1 つの行のみを追加しますが、エントリごとに新しい ID を作成する必要があります。申し訳ありませんが、少しあいまいです。しかし、あなたの助けに本当に感謝します!
今すぐ手に入れるのにはるかに近いです!ただし、次の月に日付を変更すると、キーの重複エラーが発生します: メッセージ 2627、レベル 14、状態 1、行 15 PRIMARY KEY 制約 'PK_Logger_test2' の違反。オブジェクト 'dbo.Logger_test2' に重複するキーを挿入できません。重複キーの値は (4) です。重複キーを挿入しないようにする別の方法はありますか?
解決済み: これが完成したコードです:)、魅力的に働き、私の人生をずっと楽にしました! ユーザーIDを変更するだけで、来年の予定された休暇を入力しました。
DECLARE @StartDate DateTime
DECLARE @EndDate DateTime
DECLARE @DateVar DateTime
DECLARE @PL_ID int
DECLARE @User_ID int
DECLARE @Reason nvarchar(50)
DECLARE @Details nvarchar (500)
SET @StartDate = '30/09/2012'
SET @EndDate = '24/12/2012'
SET @DateVar = @StartDate
SET @User_ID = 55
SET @Reason = 'Day off'
SET @Details = 'Day off'
--SET @PL_ID = 0
SELECT @PL_ID = max(PL_ID) from People_Logger
WHILE @DateVar <= @EndDate
BEGIN
select @PL_ID = @PL_ID +1
SET IDENTITY_INSERT dbo.People_logger ON;
INSERT INTO People_Logger(PL_ID,LOG_Date,User_ID,Reason,Details,In_Time,Out_Time)
SELECT @PL_ID,@DateVar,@User_ID,@Reason,@Details,
CASE WHEN DATENAME(dw,@DateVar) = 'Thursday' THEN 'After 5'
WHEN DATENAME(dw,@DateVar) = 'Friday' THEN 'After 5'
END AS In_Time,
CASE WHEN DATENAME(dw,@DateVar) = 'Thursday' THEN '9'
WHEN DATENAME(dw,@DateVar) = 'Friday' THEN '9'
END AS Out_Time
WHERE DATENAME(dw,@DateVar) IN ('Thursday','Friday')
SET IDENTITY_INSERT dbo.People_Logger OFF;
SET @DateVar = DATEADD(d,1,@DateVar)
END