以下は、SQL データベースにテーブルを設定するために使用するストアド プロシージャです。@expDate は、C# バッチ ジョブから送信されるパラメーターで、Excel スプレッドシートから値を取得します。
現在のエージェントのトレーニングが有効な場合、スプレッドシートの有効期限セルに値はありません。これにより、空の文字列が C# コードからストアド プロシージャに送信され、日時値 1900-01-01 に変換されます。これは、カーソルを使用してテーブルに新しいレコードを挿入する必要があるポイントまでは問題ありません。
@expDate 値が 1900-01-01 の場合、SQL レコードの有効期限フィールドの値を NULL にする必要があります。ただし、 @expDate = NULL を設定することも、単に空白に設定することもできません ('') [編集: ビジネス ルールのため、空白に設定することはできません。値を空白にすると、フィールドの値が 1900-01-01 に設定されます]。助言がありますか?
DECLARE @date datetime = GETDATE()
IF @expDate = '1900-01-01' SET @flag = '1'
IF @expDate = '1900-01-01' SET @expDate = GETDATE()
DECLARE prod_cursor CURSOR LOCAL SCROLL FOR
SELECT ProductCode
FROM CourseToProduct
WHERE CourseCode = @courseCode and (TerminationDate >= @expDate OR TerminationDate IS NULL)
IF @flag = '1' SET @expDate = ''
OPEN prod_cursor
FETCH NEXT FROM prod_cursor
INTO @productCode
WHILE @@FETCH_STATUS = 0
BEGIN
IF NOT EXISTS
(
SELECT *
FROM AgentProductTraining
WHERE @sNumber = SNumber and
@courseCode = CourseCode and
@productCode = ProductCode and
@dateTaken = DateTaken
)
BEGIN
IF @sNumber IS NOT NULL
BEGIN
INSERT INTO AgentProductTraining
(
SNumber,
CourseCode,
ProductCode,
DateTaken,
DateExpired,
LastChangeOperator,
LastChangeDate
)
VALUES (
@sNumber,
@courseCode,
@productCode,
@dateTaken,
COALESCE(@expDate, 'NULL'),
@lastChangeOperator,
@lastChangeDate
)
END
END
FETCH NEXT FROM prod_cursor
INTO @productCode
END
CLOSE prod_cursor;
DEALLOCATE prod_cursor;