【问题标题】:Changing DB Collation in VS2010 DB Project在 VS2010 数据库项目中更改数据库排序规则
【发布时间】:2012-01-24 06:02:23
【问题描述】:

我在 SQL Server 2008 R2 中有一个数据库项目。我在这个项目中有一张桌子,例如:

CREATE TABLE [dbo].[MyTable](
    [IDField] [int] IDENTITY(1,1) NOT NULL,
    [AnotherField] [int] NULL,
    [StrangeBehaviour] [varchar](50) NULL,
 CONSTRAINT [PK_MyID] PRIMARY KEY CLUSTERED 
(
    [IDField] ASC
) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

表格脚本如下所示。当我使用 vsdbcmd.exe 部署项目时,它会按预期创建/更新表。

但是,在对象资源管理器的 SSMS 中,如果我在目标数据库上选择表列“StrangeBehaviour”并选择“属性”或“修改”,那么我看到排序规则设置为数据库默认值以外的其他值(默认值为Windows 排序规则 -> Latin1_General。然后将其设置为看似随机的窗口排序规则。

如果我在 SSMS 中将表格编写为“插入到”,那么我看不到更改的排序规则。

因此我有两个问题:

  • 我的印象是升级脚本是基于 DB 项目中的 SQL 的 - 不是这样吗?如果不是,我如何访问附加数据?

  • 当似乎没有任何脚本引用更改的排序规则时,此属性如何保存在目标数据库中?

【问题讨论】:

    标签: database sql-server-2008-r2 collation database-project


    【解决方案1】:

    Properties > Database.sqlsettings 下的数据库项目中有一个数据库排序规则属性。从 Visual Studio 或 VSDBCMD 部署时生成的脚本会将默认排序规则更改为此设置中指定的排序规则(如果它尚未匹配)。

    然后,由 Visual Studio 部署创建的列的排序规则将基于此设置。

    我已通过使用默认排序规则 Latin1_General_CI_AS 创建一个新数据库对此进行了测试。然后我创建了一个新的数据库项目,默认排序规则设置为SQL_Latin1_General_CP1_CI_AS。这是 Visual Studio 创建的部署脚本:

    ...
    ALTER DATABASE [$(DatabaseName)] COLLATE SQL_Latin1_General_CP1_CI_AS;
    
    
    GO
    USE [$(DatabaseName)]
    GO
    /*
     Pre-Deployment Script Template
    ...
    */
    
    GO
    PRINT N'Creating [dbo].[MyTable]...';
    
    
    GO
    CREATE TABLE [dbo].[MyTable] (
        [IDField]          INT          IDENTITY (1, 1) NOT NULL,
        [AnotherField]     INT          NULL,
        [StrangeBehaviour] VARCHAR (50) NULL,
        CONSTRAINT [PK_MyID] PRIMARY KEY CLUSTERED ([IDField] ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF) ON [PRIMARY]
    );
    
    
    GO
    ...
    

    【讨论】:

    • 但是这种排序规则只发生在单个列上,数据库的默认排序规则没有改变。
    【解决方案2】:

    在 SQL Server Management Studio (SSMS) 中,有一个选项可以为您通过 GUI 完成的更改自动生成脚本。此问题的解决方案在 SSMS 中提供,并且适用于 SQL Server 2005 和 SQL Server 2008。

    启用该选项

    从 SSMS 菜单中点击“工具”

    点击“选项...”

    点击“设计师”

    选中复选框“自动生成更改脚本”

    【讨论】:

      【解决方案3】:

      我遇到了与我的键盘类似的问题,我用点大写 i:İ(土耳其语 i)

      大概是这种情况:

      您的 vsdbcmd.exe 工具从 windows 排序规则中获取排序规则。

      这不是随机的,请检查您的窗口您的排序规则:

      http://msdn.microsoft.com/en-us/library/aa176553%28v=sql.80%29.aspx

      这里有一个关于 windows 排序规则与 sql 排序规则的链接:

      http://msdn.microsoft.com/en-us/library/ms143508.aspx

      我不是 sql 人,但我的查询包括 id 已转换为 İD

      当我从 sql 表的上下文菜单中说 Select Top 1000 rows 时。 因为如果失败,它会使用 windows 排序规则。

      但是,当我从 sql 表的上下文菜单中说 Edit Top200 rows 时,它可以工作。

      【讨论】:

        猜你喜欢
        • 2011-04-08
        • 2013-10-25
        • 2017-09-22
        • 1970-01-01
        • 1970-01-01
        • 2013-08-05
        • 1970-01-01
        • 1970-01-01
        • 2014-11-25
        相关资源
        最近更新 更多