SQL 服务器:为临时 table 定义相同的数据库排序规则
SQL SERVER: Define same database collation for temporary table
我在 SQL 服务器中有一个脚本。在该脚本中,我创建了一个临时的 table,如下所示:
CREATE TABLE #tmpTbl(ID char(36) NOT NULL, Field1 char(36) NOT NULL, Field2 varchar(50) NOT NULL, Field3 varchar(50))
为整个临时文件设置排序规则table我这样做:
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)
如您所见,我对每一列都应用了排序规则。所以我正在尝试执行以下操作:
- 不是将排序规则应用于临时 table 的每一列,是否有可能一次将排序规则应用于临时 table 的所有列?
- 有没有办法通过变量从数据库中获取排序规则,然后将其设置为临时列,而不是手动指示执行脚本的数据库具有的排序规则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)
或者我在第 1 点中已经说过,将此排序规则设置为整个临时排序规则 table。
只需使用COLLATE DATABASE_DEFAULT
CREATE TABLE #tmpTbl
(
ID CHAR(36) COLLATE DATABASE_DEFAULT NOT NULL,
Field1 CHAR(36) COLLATE DATABASE_DEFAULT NOT NULL,
Field2 VARCHAR(50) COLLATE DATABASE_DEFAULT NOT NULL,
Field3 VARCHAR(50) COLLATE DATABASE_DEFAULT NULL
)
我在 SQL 服务器中有一个脚本。在该脚本中,我创建了一个临时的 table,如下所示:
CREATE TABLE #tmpTbl(ID char(36) NOT NULL, Field1 char(36) NOT NULL, Field2 varchar(50) NOT NULL, Field3 varchar(50))
为整个临时文件设置排序规则table我这样做:
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)
如您所见,我对每一列都应用了排序规则。所以我正在尝试执行以下操作:
- 不是将排序规则应用于临时 table 的每一列,是否有可能一次将排序规则应用于临时 table 的所有列?
- 有没有办法通过变量从数据库中获取排序规则,然后将其设置为临时列,而不是手动指示执行脚本的数据库具有的排序规则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)
或者我在第 1 点中已经说过,将此排序规则设置为整个临时排序规则 table。
只需使用COLLATE DATABASE_DEFAULT
CREATE TABLE #tmpTbl
(
ID CHAR(36) COLLATE DATABASE_DEFAULT NOT NULL,
Field1 CHAR(36) COLLATE DATABASE_DEFAULT NOT NULL,
Field2 VARCHAR(50) COLLATE DATABASE_DEFAULT NOT NULL,
Field3 VARCHAR(50) COLLATE DATABASE_DEFAULT NULL
)