存储过程在多个SQL数据库上以不同的顺序返回输出
我有一个存储过程(称为存储过程在多个SQL数据库上以不同的顺序返回输出,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我有一个存储过程(称为sp1),它在两个表之间进行连接 表的架构如下所示: Table1 (id, country, name, ccy) Table2 (sId, price) 这是存储过程: SELECT RTRIM(id) as id, country FROM dbo.Table1 LEFT OUTER JOIN dbo.Table2 ON Table1.Id = Table2.sId 在一个数据库上,我得到以下结果 MNKD US Unit
sp1
),它在两个表之间进行连接
表的架构如下所示:
Table1 (id, country, name, ccy)
Table2 (sId, price)
这是存储过程:
SELECT
RTRIM(id) as id,
country
FROM
dbo.Table1
LEFT OUTER JOIN
dbo.Table2 ON Table1.Id = Table2.sId
在一个数据库上,我得到以下结果
MNKD US UnitedStates
928502811 UnitedStates
但在另一个数据库中,我得到的结果顺序不同:
928502811 UnitedStates
MNKD US UnitedStates
唯一显著的区别是表1由许多列组成,而表2只有两列
有人能帮我找出原因,以及如何解决它以获得一致的结果吗?谢谢,默认情况下SQL表和结果集是无序的。唯一的例外是当查询显式地具有order by时。如果没有order by,那么在同一数据库上对同一数据的同一查询在多次调用时可以返回不同顺序的值 如果希望结果按特定顺序排列,则添加一个排序依据:
select trim(id) as id, country
from dbo.Table1 left outer join
dbo.Table2
on Table1.Id = Table2.sId
order by id;
数据库中的行没有顺序 如果要以某种方式对结果排序,则需要使用order BY子句,例如:
SELECT
RTRIM(id) as id,
country
from dbo.Table1
left outer join dbo.Table2 on Table1.Id = Table2.sId
ORDER BY id
如果没有ORDERBY,所有的赌注都是无效的……这就是为什么当我在存储过程中使用“where子句”时,它被称为“ORDERBY”,它总是以相同的顺序给出。那么它是好的还是只有按订单保证正确的顺序?Thanks@mohituprim:只有使用显式的orderby才能保证任何顺序-其他任何事情都只是幸运的巧合