Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 临时表未在游标内工作以存储数据_Sql Server - Fatal编程技术网

Sql server 临时表未在游标内工作以存储数据

Sql server 临时表未在游标内工作以存储数据,sql-server,Sql Server,这是存储过程中的游标 使用临时表在光标内存储值 DECLARE cur CURSOR FOR SELECT * FROM @AutoDataType OPEN cur FETCH NEXT FROM cur INTO @Customer_Id,@First_Name WHILE @@FETCH_STATUS = 0 BEGIN If(NOT(@Customer_Id IS NULL)) BEGIN Select * into #Temp_Aut

这是存储过程中的游标

使用临时表在光标内存储值

DECLARE cur CURSOR FOR SELECT * FROM @AutoDataType 
OPEN cur    
FETCH NEXT FROM cur INTO @Customer_Id,@First_Name
WHILE @@FETCH_STATUS = 0 
BEGIN       
 If(NOT(@Customer_Id IS NULL))
     BEGIN
       Select * into #Temp_Auto from [dbo].[Auto] WHERE Customer_Id=@Customer_Id
 END                
  FETCH NEXT FROM cur INTO @Customer_Id,@First_Name
END
CLOSE cur    
DEALLOCATE cur
Select * from #Temp_Auto
为什么我得到无效的对象名Temp\u Auto? 如何将值放入临时表并返回

这是我的父表:

@AutoDataType包含CustomerId

我想要的是根据id获取客户记录,该id带有时间戳DESC[最新条目]

期望表

TranId CustomerId CustomerName 2.11 aaa 3.22 bbb

请引导我

这是我的父表:

@AutoDataType包含CustomerId

我想要的是根据ID获取客户记录,该ID带有时间戳DESC[最新条目]

期望表


只有4和5个TranId,因为它们的时间戳是最新的。

选择。。。INTO创建一个定义与select结果匹配的表,然后将其插入该表中,因此对于给定的表只能执行一次。如果你真的想做上面的事情,你需要在循环外创建Temp_Auto,然后插入到其中,而不是选择。。。进入


也就是说,你为什么还要麻烦光标呢?考虑到你的代码,它是完全不必要的,而且与其他替代方案相比,它的性能相当差。为什么不从dbo.Auto中选择所有在@AutoDataType中有Customer\u Id的行并将它们插入临时表中呢?

在这里使用光标是错误的。您不需要数据的另一个副本,它已经在您的表变量中。您所需要的只是一个查询来获取所需的行。您需要停止考虑所有内容的循环:D

select *
from
(
    SELECT a.CustomerID 
        , a.CustomerName
        , ROW_NUMBER() over (PARTITION BY CustomerID order by TIME_STAMP desc) as RowNum 
    FROM [dbo].[Auto] a
    JOIN @AutoDataType adt on adt.Customer_Id = a.Customer_Id
) x
where x.RowNum = 1
order by CustomerID

为什么在这里使用光标?您的表变量中是否已经有此数据作为副本???当然,如果@AutoDataType中有多行,这将崩溃,因为临时表已经存在。那么如何在条件中选择行并返回?请建议您是否期望1行作为输出,并具有动态的列数?您还有没有忘记提及的其他细节?请详细查找要求。。请帮助我我为expalin it属性添加了更多数据。我在此发布的代码将完全满足您的要求。非常感谢您的时间和帮助。我看不到您创建的查询,但我怀疑这是因为表和表变量中都存在列名。在列前面加上别名,这样可以解决问题。我几乎总是在我的查询中使用别名,但出于某种原因,我没有在这里使用…我应该使用。
  CustomerID  CustomerName
     11          aaa
     12          bbb
 TranId   CustomerId CustomerName   Time_Stamp
    1          11        aaa        2015-06-05 17:39:00
    2          11        aaa        2015-06-05 17:45:00
    3          12        bbb        2015-06-05 17:45:00
    4          11        aaa        2015-06-05 20:10:00
    5          12        bbb        2015-06-05 20:10:00
  CustomerID  CustomerName
     11          aaa
     12          bbb
TranId  CustomerId CustomerName
  4        11         aaa
  5       22         bbb
select *
from
(
    SELECT a.CustomerID 
        , a.CustomerName
        , ROW_NUMBER() over (PARTITION BY CustomerID order by TIME_STAMP desc) as RowNum 
    FROM [dbo].[Auto] a
    JOIN @AutoDataType adt on adt.Customer_Id = a.Customer_Id
) x
where x.RowNum = 1
order by CustomerID