我面临着转换为日期时间的问题。
DECLARE @sql nvarchar(max)
DECLARE @Lastdate datetime
SET @Update = N'
SELECT TOP 1
'+@Lastdate+' = Purchase.LastUpdated
FROM Purchase
WHERE ID = 15
'
LastUpdated
也是数据库中的日期时间格式
那为什么它不能转换
我只想使用sp_executesql将datetime设置为来自purchase.lastupdate的声明变量@LastDate
答案 0 :(得分:2)
这是使用@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'
答案 1 :(得分:1)
如果您尝试传递恒定值,请使用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
一起使用,以便可以控制要影响的行。