Переменная Surround с одинарными кавычками при передаче SQL Smalldatetime - PullRequest
1 голос
/ 21 января 2010

У меня есть проблема / вопрос, на который я, возможно, слишком долго смотрел сегодня.

У меня есть хранимая процедура, которая получает данные из веб-приложения. Данные поступают в формате smalldate time. Я пытаюсь передать эту информацию второй хранимой процедуре, но вторая не сработает, если данные не заключены в одинарные кавычки. Будет ли лучше разыграть это как varchar?

По понятным причинам SET @CompletedDate должно быть '2010-01-20 15:28:00 ". Как передать эту информацию во вторую процедуру?

DECLARE @return_value int
    ,@TaskID int
    ,@CompletedDate smalldatetime
SET @TaskID = 90
SET @CompletedDate = 2010-01-20 15:28:00

EXEC    @return_value = [dbo].[usp_Task_Completion]
        @TaskID = @TaskID,
        @CompletedDate = @CompletedDate

Вот usp_Task_Completion SP

SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[usp_Task_Completion]
@TaskID int 
,@CompletedDate smalldatetime
AS
BEGIN

SET NOCOUNT ON;

--Mark Transaction as complete
UPDATE dbo.Task
SET Completed = 1
    ,CompletedDate =  @CompletedDate
WHERE TaskID = @TaskID

Ответы [ 5 ]

2 голосов
/ 21 января 2010

нет, потому что varchar также должен быть заключен в одинарные кавычки, просто заключите его в кавычки

DECLARE @return_value int
    ,@TaskID int
    ,@CompletedDate smalldatetime
SET @TaskID = 90
SET @CompletedDate = '2010-01-20 15:28:00'

EXEC    @return_value = [dbo].[usp_Task_Completion]
        @TaskID = @TaskID,
        @CompletedDate = @CompletedDate
0 голосов
/ 21 января 2010

Я предполагаю, что столбец CompletedDate не smalldatetime, и он пытается преобразовать каждое значение в этом столбце в тип smalldatetime (с некоторыми ошибками). Пожалуйста, проверьте тип столбца, чтобы быть уверенным.

0 голосов
/ 21 января 2010

Это немного для комментария. В чем проблема? Ниже приведены мои тесты:

/*
create proc usp_Task_Completion (
    @TaskID int,
    @CompletedDate smalldatetime)
as 

    return 1000
*/
go


DECLARE @return_value int
    ,@TaskID int
    ,@CompletedDate smalldatetime
SET @TaskID = 90

/* This works */
--SET @CompletedDate = '2010-01-20 15:28:00'    

/* This doesn't work (incorrect syntax near '15'. */
--SET @CompletedDate = 2010-01-20 15:28:00      

/* This runs but yields unintended results (2010-01-20 = 1989; convert to datetime = '1905-06-13' */
SET @CompletedDate = 2010-01-20 

EXEC    @return_value = [dbo].[usp_Task_Completion]
        @TaskID = @TaskID,
        @CompletedDate = @CompletedDate

select @return_value
0 голосов
/ 21 января 2010

Возможно, у вас есть конфликт имен на @CompletedDate. Измените имя переменной в объявлении, а затем измените команду set, чтобы использовать одинарные кавычки, например:

SET @CompletedDateNewName = '2010-01-20 15:28:00'

@ CompletedDate все еще может быть типом smalldatetime

0 голосов
/ 21 января 2010

да, вы должны заключить эту маленькую дату-время 2010-01-20 15:28:00 в одинарные кавычки -> '2010-01-20 15: 28: 00'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...