在数据库中创建存储过程的时候,参数的默认值是必须为常量或NULL的,因此对于希望将时间类型参数的默认值设为当前时间的朋友来说,就会出现操作不当的情况了。
解决方法很简单,只需将其默认值设置延后就可以了。
如:
CREATE PROCEDURE TEST
@TestDate DATETIME=NULL
AS
IF(@TestDate IS NULL)
SET @TestDate=GETDATE()
...
do something what you want
...
GO
参考了starspeak的文章 http://www.cnblogs.com/starspeak/archive/2008/05/27/1208400.html
示例:
IF OBJECT_ID ( 'dbo.usp_Test', 'P' ) IS NOT NULL
DROP PROCEDURE dbo.usp_Test;
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_Test]
@DateTime datetime = NULL
AS
BEGIN
SET NOCOUNT ON;
IF(@DateTime IS NULL)
SET @DateTime = GETDATE();
declare @DateStr varchar(20); --日期字符串,短格式,yymmdd 即080715
declare @Hour int; --小时数
set @DateStr = CONVERT(char(6),DATEADD(hh,-1,@DateTime),12);
set @Hour = DATEPART(hh,@DateTime);
print @DateStr;
print @Hour;
END
GO
参考:starspeak http://www.cnblogs.com/starspeak/archive/2008/05/27/1208400.html