在VS2010 DB项目中更改DB排序规则

时间:2011-12-20 08:34:26

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

我在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 Collat​​ion - > Latin1_General。然后将其设置为看似随机的Windows排序规则。

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

因此我有两个问题:

  • 我的印象是升级脚本基于数据库项目中的SQL - 不是这种情况,如果没有,我该如何访问其他数据?

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

3 个答案:

答案 0 :(得分: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
...

答案 1 :(得分:0)

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

启用选项

从SSMS菜单中单击“工具”

点击“选项...”

点击“设计师”

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

答案 2 :(得分:0)

我遇到类似问题,因为我的键盘上有一个问题:İ(土耳其语i)

可能是这种情况:

您的vsdbcmd.exe工具会从Windows排序规则中进行合并。

这不是随机的,请从以下位置检查您的窗口:

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

这里有一个关于windows collat​​ion vs sql collat​​ion的很棒的链接:

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

我不是sql家伙,但我的查询包括id转到İD

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

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