【问题标题】:How to script non-default collation and skip explicit scripting for default collation?如何编写非默认排序规则并跳过默认排序规则的显式脚本?
【发布时间】: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 collat​​ion" 改为 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


【解决方案1】:

我通过 MS Connect 提交了一个建议:
Collations are scripted either for all columns or for none

以下是相关回复:

Microsoft 于 2010 年 11 月 11 日上午 10:16 发布
嗨根纳迪:

感谢您写信给 Microsoft。我们非常重视您的反馈。我们了解您的问题,以及如何解决此问题可以提高生产力。

但是,鉴于实施这项工作所涉及的工作以及我们的一系列可交付成果,我们认为我们在不久的将来能够实现这一目标。

话虽如此,我们重视您的建议,并向您保证,当我们将来重新访问此功能时,我们会牢记这些想法。

再次感谢您提供反馈并使 SQL Server 成为最出色的数据库服务器。

问候

钱德拉穆利

【讨论】:

    猜你喜欢
    • 2018-12-19
    • 2012-08-24
    • 1970-01-01
    • 2012-03-27
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    相关资源
    最近更新 更多