11

我有一个临时表,它使用批量插入插入数据。但是,当我想将临时表中的数据更新到普通表时,它会出现排序问题。我知道如何通过使用类似的东西来解决这个问题:

UPDATE RegularTable
SET r.Column1 = t.ColumnA
FROM RegularTable r INNER JOIN #TEMP t ON
r.Column1 COLLATE DATABASE_DEFAULT = 
t.ColumnA COLLATE DATABASE_DEFAULT

但是,有没有办法立即在临时表中设置排序规则,这样您就不必在连接中使用排序规则?就像是:

CREATE TABLE #TEMP
Column1 varchar(255) COLLATE database_default,
Column2 varchar(60) 

这是正确的编码吗?您是否必须为每个表或每列设置一次排序规则?如果表中设置了排序规则,那么您可以从联接中排除排序规则吗?

4

2 回答 2

12

您可以使用COLLATE database_default您描述的语法在临时表定义中使用,这将使每列排序规则与您的数据库兼容。

您必须为每列显式设置它。没有表级默认排序规则。有一个数据库级别的默认排序规则,但tempdb它始终等于model数据库的默认排序规则,默认情况下是服务器排序规则。

如果您在表列上设置排序规则,您仍然可以在查询中覆盖它,正如您已经体验过的那样。

于 2014-05-06T20:13:12.270 回答
3

我们现在遇到了同样的问题。我们没有将排序规则添加到每个临时表连接,而是将临时表创建更改为表变量声明。

于 2016-10-14T08:15:47.877 回答