代码之家  ›  专栏  ›  技术社区  ›  Ryan Gadsdon

在临时表中使用变量-SQL Server

  •  0
  • Ryan Gadsdon  · 技术社区  · 6 年前

    我正在创建一个临时表。这是附加到一个更大的查询,但我不能显示它,所以这是一个演示。我把这个放到一个临时表中,这样计算出来的日期对临时表中的乐观者来说会更好-

    DECLARE @CurrentDate datetime
    SET @CurrentDate = getdate()
    
    CREATE TABLE #Test
    (      
                 [Date] datetime,
                 [Id] uniqueidentifier
    );
    
    INSERT INTO #Test 
    SELECT                     MAX(l.[Date]) AS [Date],
                           l.[Id] AS [Id]
                  FROM     [Table1] AS [l] 
                  WHERE l.[Date] <= @CurrentDate
                  GROUP BY l.[Id]
    
    SELECT * FROM #Test
    

    但是,我得到了错误, '必须声明标量变量“@CurrentDate”。' 什么是让这个工作的最好方法?是在insert-select语句中声明变量的唯一方法吗?谢谢

    类似于:

    DECLARE @CurrentDate datetime
    SET @CurrentDate = getdate()
    
    CREATE TABLE #Test
    (      
                 [Date] datetime,
                 [Id] uniqueidentifier
    );
    
    INSERT INTO #Test 
    DECLARE @CurrentDate datetime
    SET @CurrentDate = getdate()
    SELECT                     MAX(l.[Date]) AS [Date],
                           l.[Id] AS [Id]
                  FROM     [Table1] AS [l] 
                  WHERE l.[Date] <= @CurrentDate
                  GROUP BY l.[Id]
    
    SELECT * FROM #Test
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Milney    6 年前

    如果分批运行,则必须在使用变量的同一批中声明该变量

    CREATE TABLE #Test
    (      
                 [Date] datetime,
                 [Id] uniqueidentifier
    );
    
    -- You must run this all in one go
    DECLARE @CurrentDate datetime
    SET @CurrentDate = getdate()
    INSERT INTO #Test 
    SELECT                     MAX(l.[Date]) AS [Date],
                           l.[Id] AS [Id]
                  FROM     [Table1] AS [l] 
                  WHERE l.[Date] <= @CurrentDate
                  GROUP BY l.[Id]
    
    SELECT * FROM #Test