Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在VS2010数据库项目中更改数据库排序规则_Database_Sql Server 2008 R2_Collation_Database Project - Fatal编程技术网

Database 在VS2010数据库项目中更改数据库排序规则

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]

我在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] 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
时,它是有效的。

但是这种排序规则只发生在一列上,数据库的默认排序规则是不变的。但是这种排序规则只发生在一列上,数据库的默认排序规则是不变的。