我们使用的是 SQL Server 2012。
假设我们有这样的类型:
create type dbo.user (
id int,
name varchar,
age int,
)
而这个存储过程
create procedure dbo.InsertUsers
@Users dbo.user readonly
as
begin
insert into dbo.Users
select * from @Users
end
在这种情况下,存储过程中的视图运算符是否可以INSERT INTO SELECT * FROM @Users按照与传递数据的顺序不同的顺序插入数据@Users?
如果我正确理解了这个问题,那么它与行的顺序有关。
不,不能保证行的顺序,它可以是任意的。
但是据我所知,列(列)的顺序将始终与创建表时设置的顺序相同。
但是,如果您使用多个表的连接(join),那么列的顺序会稍微复杂一些。在这种情况下,最好手动指定它。
根据 SQL 标准,表中的列不是“有序的”。
因此, select * 不会强制以特定顺序返回列。
通常,每个 RDBMS 都有某种“默认”顺序(通常是列添加到表中的顺序),但仍不能保证返回它们的顺序。
因此,您必须按所需顺序显式列出列。