Как объявить статическую дату при выполнении хранимого сценария proc? - PullRequest
2 голосов
/ 27 января 2012

Я пытаюсь выполнить скрипт через 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 ]

2 голосов
/ 27 января 2012

Если это для SQL Server, вы должны использовать yyyy-mm-ddThh:mi:ss.mmm. Это будет безопасно независимо от региональных настроек.

Примечание: T важно и должно быть в строке 2012-01-27T10:37:31.
Другим вариантом будет удалить - 20120127 10:37:31.

1 голос
/ 27 января 2012

Вам необходимо указать пользовательский стиль DateTime и, что наиболее важно, - вы не можете использовать функции даты и времени непосредственно для вызова SP, поэтому кешируйте преобразованное значение даты и времени во временную переменную благодаря 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 (тип данных [(длина)], выражение [, стиль])

0 голосов
/ 27 января 2012

Обычно при использовании строк в качестве даты:

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 () проверить справку T-SQL на этих 2.

ПРИМЕЧАНИЕ: используйте формат, упомянутый Микаэлем (то есть 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
0 голосов
/ 27 января 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...