我在SP做这样的事情,
insert into @FilteredTbl select * from @MasterTbl
但现在的问题是,我希望在添加到@MasterTbl
之前对@FilteredTbl
的数据进行排序,
我该怎么做?
我发现了这个问题,答案是:
INSERT INTO @FilteredTbl
SELECT *
FROM @MasterTbl AS tbl
ORDER BY tbl.OrderbyColumn
但是这段代码没有用,感谢任何形式的帮助
这是测试的代码:
declare @table1 table
(
a1 int ,
b1 varchar(20)
)
insert into @table1 values
(1,'maza') , (2,'sari') , (3,'ahvaz') , (4,'rasht')
declare @table2 table
(
a2 int ,
b2 varchar(20)
)
insert into @table2
select *
from @table1 t1
order by t1.b1
select *
from @table2
我应该看到列b2被排序,但它不是
答案 0 :(得分:2)
正如我在评论中写的那样 - 关系数据库中的表格本质上是未分类的
这意味着您的测试不正确 - 因为您的select语句没有($util.base64Decode())
子句,它基本上以任意顺序返回行。
正确的测试将在order by
中包含一个标识列,该列将记录插入此表中的记录的顺序:
@table2
结果:
declare @table1 table
(
a1 int ,
b1 varchar(20)
)
insert into @table1 values
(1,'maza') , (2,'sari') , (3,'ahvaz') , (4,'rasht')
declare @table2 table
(
a2 int ,
b2 varchar(20),
c2 int identity(1,1)
)
insert into @table2
select *
from @table1 t1
order by t1.b1
select *
from @table2
order by c2
如果a2 b2 c2
----------- -------------------- -----------
3 ahvaz 1
1 maza 2
4 rasht 3
2 sari 4
声明中的order by子句为insert into...select
,则t1.a1
和a2
的值将相同。
答案 1 :(得分:1)
在T-SQL中,不需要向表中添加标识列以对其进行排序。这里的问题是您以某种特定顺序插入数据,而不是在SELECT中以特定顺序检索数据。我在查询的末尾添加了一行,可以解决这个问题:ORDER BY B1(即B1或其他一些列)。您还可以使用像ROW_NUMBER这样的函数来更快地执行诸如动态模拟标识列之类的操作,而无需在存储端实际拥有一个。在存在标识列的情况下执行INSERT确实意味着您可以按照插入的顺序返回结果 - 但如果B1中存在重复项,那么这并不意味着什么,因为INSERT中的ORDER BY会也是未定义的。在没有指定查询的情况下,标识列会有所帮助,因为没有它,表将被视为堆,没有正确的ORDER BY的SELECT可能会返回从一个查询到下一个查询的不同,不可预测的订单的结果。但是,如果检索查询中的ORDER BY子句足够具体,那么标识列就变得无关紧要了。例如,如果B1中存在欺骗但是B1和A1的每个组合都是唯一的,那么像ORDER BY B1,A1这样的子句就足以保证定义良好的顺序,一个不会无法预测地从一个查询变为下一个。然而,在你提供的4个值的情况下,这是一个没有实际意义的点,因为它们对于B1和A1都是唯一的; ORDER BY B1应该在这里完成工作。我希望有所帮助。
declare @table1 table
(
a1 int ,
b1 varchar(20)
)
insert into @table1 values
(1,'maza') , (2,'sari') , (3,'ahvaz') , (4,'rasht')
declare @table2 table
(
a2 int ,
b2 varchar(20)
)
insert into @table2
select *
from @table1 t1
order by t1.b1
select *
from @table2
ORDER BY B1
答案 2 :(得分:0)
如果没有排序,选择没有保证订单?
select * from @ table2没有排序
如果你想要那么选择排序然后简单
select * from @table2 order by b2
你把它们放入的顺序不影响它们出来的顺序