简体   繁体   English

动态查询中SQL Server中的字符串到日期时间的转换失败

[英]Conversion failed from string to datetime in SQL Server in Dynamic Query

I am facing the problem to convert into datetime.. 我正面临转换为datetime的问题..

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

LastUpdated is also datetime format in database LastUpdated也是数据库中的日期时间格式

Then why It cannot convert 那么为什么它无法转换

I want to set the datetime into declared variable @LastDate from purchase.lastupdate using sp_executesql only 我想使用sp_executesql从buy.lastupdate将datetime设置为声明的变量@LastDate

This is another possible approach to set the value of @LastUpdated using sp_executesql : 这是使用sp_executesql设置@LastUpdated值的另一种可能方法:

-- 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'

If you are trying to pass in a constant value, then use sp_executesql . 如果您尝试传入常量值,请使用sp_executesql Your query doesn't really seem very useful. 您的查询似乎并不是非常有用。 This seems like a reasonable approximation: 这似乎是一个合理的近似值:

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;  

EDIT: 编辑:

To update data, you need to use UPDATE . 要更新数据,您需要使用UPDATE But you don't need dynamic SQL: 但是你不需要动态SQL:

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

If ID is not unique and you want to limit this to one (arbitrary) row: 如果ID不是唯一的,并且您希望将其限制为一个(任意)行:

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

You should use an ORDER BY with TOP so you can control which row you are affecting. 您应该使用带有TOPORDER BY ,以便控制您正在影响的行。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何修复SQL查询中的“从字符串转换日期时转换失败”错误? - How to fix error “Conversion failed when converting datetime from character string” in SQL Query? 错误:从字符串.NET SQL Server转换日期时间时转换失败 - Error: Conversion failed when converting datetime from character string .NET SQL Server SQL Server:“从字符串转换日期时间时转换失败。” - SQL Server: “Conversion failed when converting datetime from character string.” SQL错误:从字符串转换日期时间时转换失败 - SQL Error : Conversion failed when converting datetime from character string SQL Server 2008:将varchar转换为datetime失败 - SQL server 2008: Conversion of varchar to datetime failed 从字符串转换日期时间转换失败 - Conversion failed converting datetime from string SQL Server:从字符串转换为uniqueidentifier时转换失败 - SQL Server: Conversion failed when converting from a character string to uniqueidentifier SQL Server:从字符串转换时间时转换失败 - SQL Server: Conversion failed when converting time from character string 从 sql 服务器中的字符串转换日期时转换失败 - Conversion failed when converting date from character string in sql server 从字符串SQL Server转换日期和/或时间时转换失败 - Conversion failed when converting date and/or time from string SQL Server
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM