【问题标题】:Returning an ordered set from a temp table in a stored procedure从存储过程中的临时表返回有序集
【发布时间】:2025-12-11 03:55:01
【问题描述】:

在存储过程中,我试图以特定顺序从临时表中返回数据集,但是当我在 select * from #tempTable 上使用 Order By 子句时,我收到错误“列名无效”我订购的任何列。

代码在查询分析器窗口中工作,但在存储过程中不起作用,但存储过程将保存并且不会引发错误。

为什么会这样,我该如何解决?

代码如下:

SELECT
    c.CaseID,
    Person.PersonID,
    Person.LastName, Person.FirstName, Person.MiddleName
INTO 
    #People
FROM
    [Case] c 
INNER JOIN
    Person ON c.PersonID = Person.PersonID
WHERE
    c.CaseID = @caseID
ORDER BY
    c.CaseID 

SELECT * 
FROM #People 
ORDER BY CaseID

【问题讨论】:

  • 我无法重现您的问题,并不是我认为可以。创建一个将INFORMATION_SCHEMA.TABLES 查询到临时表中的存储过程,并以从该临时表中选择并带有order by 子句的方式结束。如果您仍然遇到问题,请在您的问题中完整添加该存储过程。
  • 我无法使用 INFORMATION_SCHEMA.TABLES 重现它。源表上的索引会导致问题吗?
  • 我不这么认为。你能制作一个不使用信息模式的完整再现案例吗?我的意思是,为表和存储过程创建脚本,向表中插入一些内容,这说明问题?
  • 我周末要去,但我会在周一试一试。谢谢!
  • :) 哇,周末早!这只是星期三!

标签: sql-server stored-procedures sql-server-2012


【解决方案1】:

-- 您在 select 语句中提到了列名--

CREATE TABLE #People (CaseID int identity(1,1) not null,
    PersonID int,LastName varchar(50),FirstName varchar(50),MiddleName varchar(50))

INSERT INTO #People
       VALUES(1,'P','RAJA','')
INSERT INTO #People
       VALUES(2,'S','Kannan','')
INSERT INTO #People
       VALUES(3,'A','Ravi','Kumar')
INSERT INTO #People
       VALUES(4,'D','Murugan','')
INSERT INTO #People
       VALUES(5,'G','Abhi','')
INSERT INTO #People
       VALUES(6,'R','Nayak','')

SELECT CaseID,PersonID,LastName,FirstName,MiddleName
FROM #People 
ORDER BY CaseID


DROP TABLE #People

【讨论】: