2013-04-30 2 views
0

나는 이에 대한 해답을 찾았지만 찾지 못했습니다. 테이블에 데이터를 쓰는 저장 프로 시저가 있습니다. 삽입에는 DateTime 필드가 있지만이 필드는 입력되는 데이터에 따라 비어있을 수 있습니다.저장 프로 시저를 통해 datetime 필드에 NULL 값을 삽입하는 방법

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) 

저장 프로 시저는 다음과 같습니다 : 내 클래식 ASP 페이지의 코드는 다음과 유사한

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 필드를 벗어나려면 무엇이 필요합니까? 테이블에 비어 있니?

저는 저장 프로 시저가 새로 도입되었으므로 초보자 용의 오류는 용서하십시오. :)

감사합니다.

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) 문제를 해결해야한다 : 위의 쿼리는 SQL 주입에 매우 취약 -

+0

스토어 절차에서 @DateClosed datetime = NULL을 시도하십시오. –

+0

"NULL"은 단지 실제 값이 아닌 빈 값을 가져옵니다. 거기에 실제 null 값을 가지고'DateClosed = VBNull'로 변경하십시오. –

답변

1

첫째, 당신은 매개 변수가있는 쿼리를 사용하여 SP를 호출하여 ASP 코드를 변경해야 '작은 따옴표'로 'NULL'값을 삽입하십시오.

+0

감사합니다. 덕분에이 문제를 해결할 수있었습니다. – user2335705

+0

@ user2335705 - np, 기꺼이 도와 드리겠습니다! – sgeddes

관련 문제