如何在执行存储过程脚本时声明静态日期?

时间:2012-01-27 11:07:15

标签: sql sql-server tsql

我正在尝试通过Management Studio执行脚本。

这样的事情:

USE [MYDB]
GO

DECLARE @return_value int

EXEC    @return_value = [dbo].[myTABLE]
        @AsAt = Datetime('27/01/2012 10:37:31'),
        @BatchID = 6754848

SELECT  'Return Value' = @return_value

GO

不断收到错误,说它无法从nVarChar转换为日期时间。这样做的正确方法是什么?

4 个答案:

答案 0 :(得分:2)

如果是SQL Server,则应使用yyyy-mm-ddThh:mi:ss.mmm。无论区域设置如何,它都是安全的。

注意: T很重要,应该在字符串2012-01-27T10:37:31中。
另一种选择是删除- 20120127 10:37:31

答案 1 :(得分:1)

您需要指定自定义DateTime样式以及最重要的 - 您不能使用日期时间函数直接进行SP调用,因此缓存转换后的datetime值在临时变量中 感谢Martin Smith这一点:

DECLARE @return_value int  
DECLARE @tmpDate varchar(20)
SELECT @tmpDate = CONVERT(datetime, '27/01/2012 10:37:31', 103)

EXEC    @return_value = [dbo].[myTABLE]         
        @AsAt = @tmpDate,
        @BatchID = 6754848 

MSDN

  

CONVERT的语法:

     

CONVERT(data_type [(length)],expression [,style])

答案 2 :(得分:0)

请参阅SQL Server

中的How to convert from string to datetime上的这篇文章

答案 3 :(得分:0)

通常在使用字符串作为日期时:

DECLARE @mydate AS DATETIME

SELECT @mydate = CAST('2012-01-27 10:37:31' AS DATETIME)

SELECT @mydate


-----------------------
2012-01-27 10:37:31.000

尝试使用CAST()或CONVERT()检查那些2的T-SQL帮助。

注意:使用Mikael提到的格式(即'2012-01-27 10:37:31.000') 或者你可能会看到这样的错误:

Msg 242, Level 16, State 3, Line 5
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

关于转换/转换没有处理过程调用的说法是真的,所以你需要改变一下你的查询:

DECLARE @return_value int
DECLARE @AsAt DATETIME 
SELECT @AsAt = CAST('2012-01-27 10:37:31' AS DATETIME)
EXEC    @return_value = [dbo].[myTABLE] 
        @AsAt,
        @BatchID = 6754848 

SELECT  'Return Value' = @return_value