SQL Server新列已添加到表中,但Select存在问题*

SQL Server新列已添加到表中,但Select存在问题*,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,早上好 我有一个从表中返回“SELECT*”的存储过程 每当我向表中添加新列时,“SELECT*”通常会在错误的列中返回一些数据 这是优化还是缓存问题?如何解决这个问题而不必在存储过程中显式定义返回列名 谢谢 无论问题的确切性质或解决方案如何,我建议您不要使用Select*From Table。效率较低-每次运行查询时,都会向数据库发送一个额外的请求,以确定“*”列的确切组成,然后发送一个包含特定列信息的正确请求。问题的原因可能取决于您使用的客户端堆栈 一般来说,如果执行SELECT*,SQL

早上好

我有一个从表中返回“SELECT*”的存储过程

每当我向表中添加新列时,“SELECT*”通常会在错误的列中返回一些数据

这是优化还是缓存问题?如何解决这个问题而不必在存储过程中显式定义返回列名


谢谢

无论问题的确切性质或解决方案如何,我建议您不要使用
Select*From Table
。效率较低-每次运行查询时,都会向数据库发送一个额外的请求,以确定“*”列的确切组成,然后发送一个包含特定列信息的正确请求。

问题的原因可能取决于您使用的客户端堆栈

一般来说,如果执行SELECT*,SQL Server将按列添加到表中的顺序返回列。如果查询中涉及多个表,它将按照每个表在查询中出现的顺序返回这些列

如果表列已更改,则缓存和优化都不应影响此服务器端,因此可能是您的代码和服务器之间发生了某些事情,无论您使用的是什么数据访问堆栈


这是通常建议不要在客户机代码中使用“SELECT*”的原因之一。

避免此问题的最佳方法是让存储过程返回一组预定义的列(
SELECT a,b
,而不是
SELECT*
),并使用表联接检索其余代码。因为存储过程不能是查询的一部分,所以可以将存储过程重构为n并对其执行联接:

SELECT f.a, f.b, t.*
FROM dbo.fn_YourFunction('a', 'b') f
INNER JOIN YourTable t ON f.id = t.id

你怎么说列错了?到底发生了什么?你能举例说明吗?