Ошибка преобразования из строки в дату и время в SQL Server в динамическом запросе - PullRequest
0 голосов
/ 20 сентября 2018

Я сталкиваюсь с проблемой преобразования в datetime ..

DECLARE @sql nvarchar(max)
DECLARE @Lastdate datetime
SET @Update = N'    
                        SELECT TOP 1 
                            '+@Lastdate+' = Purchase.LastUpdated
                        FROM    Purchase
                        WHERE   ID = 15                         
                    '

LastUpdated также формат даты и времени в базе данных

Тогда почему он не может преобразовать

Я хочу установить datetime в объявленную переменную @LastDate из purchase.lastupdate, используя только sp_executesql

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Это еще один возможный подход для установки значения @LastUpdated с использованием sp_executesql:

-- Declaration
DECLARE @sql nvarchar(max)
DECLARE @LastUpdated datetime
DECLARE @err int

-- Statement
SET @sql = N'
    SELECT TOP 1 @LastUpdated = Purchase.LastUpdated
    FROM Purchase
    WHERE ID = 15
'
-- Execution
EXEC @err = sp_executesql 
    @sql,
    N'@LastUpdated datetime OUTPUT',
    @LastUpdated OUTPUT

-- Test output
IF @err = 0 
   PRINT @LastUpdated
ELSE 
   PRINT 'Error'
0 голосов
/ 20 сентября 2018

Если вы пытаетесь передать постоянное значение, используйте sp_executesql.Ваш запрос на самом деле не кажется очень полезным.Это выглядит как разумное приближение:

DECLARE @LastUpdated datetime;
SET @Update = N'    
SELECT TOP 1 @LastUpdated as LastUpdated
FROM    Purchase
WHERE   ID = 15';

EXEC sp_executesql @Update,
                   N'@LastUpdated datetime',
                   @LastUpdated=@LastUpdated;  

РЕДАКТИРОВАТЬ:

Для обновления данных вам необходимо использовать UPDATE.Но вам не нужен динамический SQL:

UPDATE Purchase
    SET LastUpdated = @LastUpdated
    WHERE ID = 15;

Если ID не уникален, и вы хотите ограничить его одной (произвольной) строкой:

UPDATE p
    SET LastUpdated = @LastUpdated
    FROM (SELECT TOP (1)
          FROM Purchase
         ) p
    WHERE ID = 15;

Вы должны использоватьORDER BY с TOP, чтобы вы могли контролировать, на какую строку вы воздействуете.

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