选择Top 1字段并分配给本地变量

Ste*_*ple 60 sql sql-server

我想从此查询中获取ExtractedDate的值,并在下一个查询中将其用作@LastExtractDate.我怎么做?

    SELECT TOP 1 [ExtractedDate]
    FROM [OnsiteV4].[dbo].[SqlPendingIndex] order by ExtractedDate desc
Run Code Online (Sandbox Code Playgroud)

下一个查询:

    insert into @table(Hex, KeyDeviceId, ObjectDateTime, ExtractedDate  )
SELECT     CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), ObjectValue, 1)) AS Hex, KeyDeviceId, ObjectDateTime , GETDATE ()
    FROM         SQLPending
    WHERE     (ObjectSubType LIKE '%GAS%') and (ObjectDateTime > @LastExtractDate)
Run Code Online (Sandbox Code Playgroud)

Bre*_*der 102

为什么不用这个:

declare @LastExtractDate date
SELECT TOP 1 @LastExtractDate=[ExtractedDate]
FROM [OnsiteV4].[dbo].[SqlPendingIndex] order by ExtractedDate desc
Run Code Online (Sandbox Code Playgroud)

  • 这个语法不正确。如果您尝试运行此代码,您将在 Sql Server 中获得 NULL 值。您需要从子查询将值分配给变量。示例:`declare @SomeVar varchar(100) = (从 someTable 中选择前 1 个 someCol)` (2认同)

Jes*_*aja 9

用这个:

DECLARE @ExtractedDate DATETIME
SET  @ExtractedDate = (SELECT    TOP 1 ExtractedDate
                       FROM      [OnsiteV4].[dbo].[SqlPendingIndex]
                       ORDER BY  ExtractedDate DESC
Run Code Online (Sandbox Code Playgroud)


Ale*_* K. 8

只需声明并指定:

DECLARE @LastExtractDate DATETIME = (
    SELECT TOP 1 [ExtractedDate] FROM [OnsiteV4].[dbo].[SqlPendingIndex] order by ExtractedDate desc
)
Run Code Online (Sandbox Code Playgroud)

或更好:

DECLARE @LastExtractDate DATETIME = (
    SELECT MAX(ExtractedDate) FROM [OnsiteV4].[dbo].[SqlPendingIndex]
)
Run Code Online (Sandbox Code Playgroud)


小智 5

简单地试试这个

declare @LastExtractDate date 
SELECT @LastExtractDate=MAX([ExtractedDate])
FROM [OnsiteV4].[dbo].[SqlPendingIndex]
Run Code Online (Sandbox Code Playgroud)