我有一个在SQL Server中的脚本。在这个脚本中,我创建了一个临时表,就像这样:
CREATE TABLE #tmpTbl(ID char(36) NOT NULL, Field1 char(36) NOT NULL, Field2 varchar(50) NOT NULL, Field3 varchar(50))
我想要为整个临时表设置排序规则,我这样做:
CREATE TABLE #tmpTbl(ID char(36) collate Modern_Spanish_CI_AS NOT NULL , Field1 char(36) collate Modern_Spanish_CI_AS NOT NULL , Field2 varchar(50) collate Modern_Spanish_CI_AS NOT NULL , Field3 varchar(50) collate Modern_Spanish_CI_AS)
正如您所见,我为每一列应用排序规则。因此,我尝试做以下事情:
- 有没有可能一次性对临时表的所有列应用排序规则,而不是对每一列都单独应用排序规则?
- 在不手动指定执行脚本的数据库具有的Modern_Spanish_CI_AS排序规则的情况下,是否有任何方法通过变量从数据库获取排序规则,然后将其设置为临时列?
例如,在最后一种情况下:
DECLARE @Collation = getdatabasecollation --> Get current database collation where script is executed.
然后:
CREATE TABLE #tmpTbl(ID char(36) collate @Collation NOT NULL , Field1 char(36) collate @Collation NOT NULL, Field2 varchar(50) collate @Collation NOT NULL , Field3 varchar(50) collate @Collation)
如我在第一点中所述,将这个排序设置为整个临时表。
CHAR
/VARCHAR
,那么是的,它们支持的字符受到排序规则的限制,而NCHAR
/NVARCHAR
则没有。无论使用哪种字符类型,排序规则仍会影响比较,并且在混合不同排序规则时仍会导致错误(即使这些排序规则在支持的字符方面是兼容的)。 - Jeroen MostertModern_Spanish_CI_AS
,并且创建了一个使用Modern_Spanish_CI_AS
的用户数据库,则tempdb
将具有不兼容的排序规则。即使您始终使用NCHAR
/NVARCHAR
,当连接表时也需要解决此处所述的问题。 - Jeroen Mostert