2013-04-30 49 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

相关问题