回答

收藏

在临时表列TSQL中设置排序规则的正确方法

技术问答 技术问答 237 人阅读 | 0 人回复 | 2023-09-14

我有一个临时表,该表使用批量插入来插入数据。但是,当我想将数据从临时表更新到普通表时,它会产生排序规则问题。我知道如何使用类似的方法来解决此问题:8 n9 x1 u8 A+ r! c8 E" S+ M, C& Q
UPDATE RegularTable1 D& R2 d5 r0 E3 y- A0 U2 Z! P! j
SET r.Column1 = t.ColumnA) m4 w7 l1 G" h# F
FROM RegularTable r INNER JOIN #TEMP t ON5 V; B5 D  i7 S/ e! T% `+ w2 ?1 K' F
r.Column1 COLLATE DATABASE_DEFAULT =
) J) y" X% l% v5 W8 |t.ColumnA COLLATE DATABASE_DEFAULT
, q/ X: K1 [; w但是,有没有一种方法可以立即在临时表中设置排序规则,因此您不必在联接中使用排序规则?就像是:  K( T4 w9 W1 u! o0 M
CREATE TABLE #TEMP) X) y1 h/ H0 I) @
Column1 varchar(255) COLLATE database_default,- T8 E) S- @0 M
Column2 varchar(60)
" b6 G2 W) a. l0 D! m- F这是正确的编码吗,您是否必须对每个表或每个列设置一次排序规则?而且,如果在表中设置了排序规则,那么您可以从联接中排除该排序规则吗?" J9 t9 v, C7 Y
                ) W& A+ U' g4 a" Q
解决方案:; U& l& {, S4 i
                + `0 N+ Y3 X: i, v8 }6 w  X. U
1 M4 ~; Y3 @$ s7 I: _- m7 ]

, n" l- p% Y' {+ \+ Y+ i, e7 W# Q                您可以使用COLLATE database_default描述的语法在临时表定义中使用,这将使每一列的排序规则与数据库兼容。
1 F8 D5 }& e( H7 r您必须按列显式设置它。没有表级别的默认排序规则。有一个数据库级别的默认排序规则,但这tempdb始终等于model数据库的默认排序规则,默认情况下为服务器排序规则。# k8 V' }' P7 H0 j; ~, O
如果您在表列上设置了排序规则,您仍然可以像以前一样在查询中覆盖它。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则