Database 在VS2010数据库项目中更改数据库排序规则
我在SQLServer2008R2中有一个DB项目。我在该项目中有一个表,例如:Database 在VS2010数据库项目中更改数据库排序规则,database,sql-server-2008-r2,collation,database-project,Database,Sql Server 2008 R2,Collation,Database Project,我在SQLServer2008R2中有一个DB项目。我在该项目中有一个表,例如: 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]
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中,如果我在目标数据库上选择表列“奇怪行为”并选择“属性”或“修改”,我会看到排序规则被设置为DB默认值以外的其他值(默认值为Windows排序规则->拉丁1_常规。然后,这被设置为看似随机的Windows排序规则
如果在SSMS中将表脚本化为“Insert To”,则看不到更改的排序规则
因此,我有两个问题:
- 我的印象是升级脚本是基于DB项目中的SQL的——不是这样吗?如果不是,我如何访问附加数据
- 当没有脚本引用更改的排序规则时,该属性如何保存在目标数据库中
属性>数据库.sqlsettings
下有一个数据库排序规则属性。从Visual Studio或VSDBCMD部署时生成的脚本将默认排序规则更改为此设置中指定的排序规则(如果尚未匹配)
然后,从VisualStudio部署创建的列的排序规则将基于此设置
我使用默认排序规则创建了一个新的数据库,该数据库的默认排序规则设置为Latin1\u General\u CI\u AS
。然后,我创建了一个新的数据库项目,默认排序规则设置设置为SQL\u Latin1\u General\u CP1\u CI\u 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
...
数据库项目中的
Properties>database.sqlsettings
下有一个数据库排序规则属性。从Visual Studio或VSDBCMD部署时生成的脚本将默认排序规则更改为此设置中指定的排序规则(如果它不匹配)
然后,从VisualStudio部署创建的列的排序规则将基于此设置
我使用默认排序规则创建了一个新的数据库,该数据库的默认排序规则设置为Latin1\u General\u CI\u AS
。然后,我创建了一个新的数据库项目,默认排序规则设置设置为SQL\u Latin1\u General\u CP1\u CI\u 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
...
在SQL Server Management Studio(SSMS)中,有一个选项可以为通过GUI所做的更改自动生成脚本。SSMS中提供了此问题的解决方案,可与SQL Server 2005和SQL Server 2008一起使用 要启用该选项 从SSMS菜单中单击“工具” 点击“选项…” 点击“设计师”
选中复选框“自动生成更改脚本”在SQL Server Management Studio(SSMS)中,有一个选项可以为通过GUI完成的更改自动生成脚本。SSMS中提供了此问题的解决方案,可与SQL Server 2005和SQL Server 2008一起使用 要启用该选项 从SSMS菜单中单击“工具” 点击“选项…” 点击“设计师”
选中复选框“自动生成更改脚本”我遇到了类似的问题,因为我的键盘上有带点的uppcase I:
İ
(土耳其语I)
可能在这种情况下:
您的vsdbcmd.exe
工具从windows排序规则中获取拼贴
它不是随机的,请从以下位置检查您的windows排序规则:
这里有一个关于windows排序规则与sql排序规则的链接:
我不是sql专家,但我的查询包括id
转换为D
当我说时,从sql表的上下文菜单中选择前1000行。
因为如果失败,它将使用windows排序规则
然而,当我从sql表的上下文菜单中说,编辑前200行时,它起作用了。我遇到了类似的问题,因为我的键盘上有带点的uppcase I:İ
(土耳其语I)
可能在这种情况下:
您的vsdbcmd.exe
工具从windows排序规则中获取拼贴
它不是随机的,请从以下位置检查您的windows排序规则:
这里有一个关于windows排序规则与sql排序规则的链接:
我不是sql专家,但我的查询包括id
转换为D
当我说时,从sql表的上下文菜单中选择前1000行。
因为如果失败,它将使用windows排序规则
但是,当我从sql表的上下文菜单中说,Edit Top200 rows
时,它是有效的。但是这种排序规则只发生在一列上,数据库的默认排序规则是不变的。但是这种排序规则只发生在一列上,数据库的默认排序规则是不变的。