【问题标题】:How to insert NULL value into datetime field via stored procedure如何通过存储过程将 NULL 值插入日期时间字段
【发布时间】:2013-04-30 14:13:54
【问题描述】:

我已经搜索过这个问题的答案,但没有找到真正有帮助的。我有一个将数据写入表的存储过程。插入包含一个 DateTime 字段,但根据输入的数据,该字段可以为空。我的经典 ASP 页面中的代码类似于以下内容:

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 字段留空?

我对存储过程很陌生,所以请原谅任何初学者的错误。 :)

谢谢。

【问题讨论】:

  • 在存储过程中尝试@DateClosed datetime = NULL..
  • "NULL" 只会产生空值,而不是实际的空值。更改为 DateClosed = VBNull 以在其中具有真正的空值。

标签: sql stored-procedures asp-classic vbscript


【解决方案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”(带单引号)之前的 null 问题。

【讨论】:

  • @user2335705 -- np,很高兴我能帮上忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 1970-01-01
  • 2012-02-28
相关资源
最近更新 更多