我正在尝试通过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转换为日期时间。这样做的正确方法是什么?
答案 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