2013-04-30 75 views
0

我已經搜索了這個答案,但沒有找到真正的幫助。我有一個將數據寫入表的存儲過程。該插入包括一個DateTime字段,但根據輸入的數據,該字段可以爲空。在我的經典ASP頁面的代碼是類似以下內容:如何通過存儲過程將NULL值插入到datetime字段中

If Request.Form("Status") = "Closed" Then 
Status = "Closed" 
DateClosed = Now() 

Else 

Status = "OPEN" 
DateClosed = NULL 

End If 

SP_AddToTable = "MyTable '" & Status & "', '" & DateClosed & "'" 

Set SQLQuery = objConn.Execute(SP_AddToTable) 

存儲過程是這樣的:

USE [MyDatabase] 
GO 
/****** Object: StoredProcedure [dbo].[SP_AddToTable] Script Date: 04/30/2013   10:00:10 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[SP_AddToTable] 

@Status varchar(20), 
@DateClosed datetime 

AS 

INSERT INTO MyTable (
[Status], 
DateClosed, 
) 

VALUES (
@Status, 
@DateClosed) 

如果我通過一個實際的日期值,它工作正常,但如果NULL值被傳遞,或者如果我沒有將任何數據傳遞給DateClosed字段,那麼該字段默認爲1900年1月1日。我需要做什麼(在我的ASP代碼或存儲過程中)離開DateClosed字段在桌子上空着?

我對存儲過程很陌生,所以請原諒任何初學者的錯誤。 :)

謝謝。

+0

嘗試@DateClosed datetime = NULL在存儲過程中。 – 2013-04-30 15:02:44

+0

「NULL」只會導致空值,不會實際爲空。更改爲'DateClosed = VBNull'在那裏有真正的空值。 – 2013-05-01 08:31:44

回答

1

首先,你需要改變你的ASP代碼使用參數化查詢調用SP - 上面的查詢是非常容易受到SQL注入:

Set cmd = Server.CreateObject("ADODB.Command") 
cmd.ActiveConnection = objConn 
cmd.CommandText = "SP_AddToTable" 
cmd.CommandType = adCmdStoredProc 
cmd.Parameters.Refresh 

cmd.Parameters(1) = Status 
cmd.Parameters(2) = DateClosed 
cmd.Execute 

這也應該可以解決你的問題,空,你是前插入值'NULL'(帶單引號)。

+0

謝謝,設法讓它工作得益於此。 – user2335705 2013-05-02 13:00:22

+0

@ user2335705 - np,很高興我能幫忙! – sgeddes 2013-05-02 13:05:59

相關問題