【发布时间】:2023-03-22 05:27:01
【问题描述】:
在 SSMS 2008 R2 中,我创建了一个表:
aTest(Albnian varchar(10), Dflt varchar(10))
在 SSMS 表设计器中,两列都有排序规则:“”(在“列属性”→“表设计器”下)
我将“Albnian”列的排序规则更改为非默认值,例如 Albanian_CI_AS。
如果我在 SSMS 中为表编写脚本(右键单击“aTest”→“将表编写为”→“创建到”→“新建查询编辑器窗口”,我会得到 [1],根本没有编写明确的排序规则脚本。
不好。
显然,人们会期望使用针对非默认排序规则(开发人员出于特定目的故意引入的排序规则)的显式排序规则和没有默认排序规则的排序规则来编写表格脚本。
在 SSMS 菜单 → 工具 → 选项 → SQL Server 对象资源管理器 → 脚本中,我更改了:
- 包括排序规则:True
- 脚本默认值:False
但是现在,我正在编写所有列排序规则脚本,包括默认和非默认排序规则 [2]。
如何配置脚本生成以编写非默认排序规则并跳过默认排序规则,如 [3] 中所示?
[1] 表的默认脚本:
CREATE TABLE [dbo].[aTest]
(
[Albnian] [varchar](10) NOT NULL,
[Dflt] [varchar](10) NOT NULL
) ON [PRIMARY]
[2] "Include collation" 改为 True 后的表格脚本
CREATE TABLE [dbo].[aTest]
(
[Albnian] [varchar](10) COLLATE Albanian_CI_AS NOT NULL,
[Dflt] [varchar](10) COLLATE Cyrillic_General_CI_AS NOT NULL
) ON [PRIMARY]
[3] 需要的排序规则脚本生成行为:
CREATE TABLE [dbo].[aTest]
(
[Albnian] [varchar](10) COLLATE Albanian_CI_AS NOT NULL,
--non-default should be scripted
[Dflt] [varchar](10) NOT NULL
-- default database collation should not be scripted
) ON [PRIMARY]
相关问题:
【问题讨论】:
-
我认为使用版本 [2] 并没有什么坏处。你为什么反对?
-
这将被部署到具有不同默认排序规则的服务器上,无意在只有英文文本的列上设置任何面向西里尔字母的固定选项
-
在这种情况下,您可能只需要对生成的脚本文件进行清理后搜索和替换即可删除不需要的排序规则。
标签: sql-server tsql code-generation collation ssms