自动设置整理

时间:2011-10-24 08:17:25

标签: sql-server tsql collation

我的应用程序的数据库mydb具有与tempdb不同的排序规则。我比较了很多异常比较tempdb临时表和mydb持久表之间的字符串值。 决定使用与tempdb相同的排序规则创建mydb。 必须使用脚本自动设置排序规则。我试过这个:

DECLARE @SQLCollation sql_variant
SELECT @SQLCollation = DATABASEPROPERTYEX('tempdb', 'Collation')
ALTER DATABASE mydb COLLATE @SQLCollation -- doesn't work
ALTER DATABASE mydb COLLATE Latin1_General_CI_AS -- works, but doesn't suit me because I have to type in collation myself in this SQL

那么如何为mydb设置与tempdb相同的排序规则?

3 个答案:

答案 0 :(得分:3)

您不能只使用ALTER DATABASE更改数据库归类。这只会更改系统数据库(对象名称等)。 (Dalex的答案)

您必须按照Changing SQL Server Database sorting的答案中详述的步骤进行操作。

使用COLLATE Database_Default来强制排序而不知道它是什么的另一种选择。请参阅SQL Server error "Implicit conversion of because the collation of the value is unresolved due to a collation conflict."SQL Server - is there a way to mass resolve collation conflicts

答案 1 :(得分:2)

更改db的排序规则不会更改db中已存在的表的排序规则。

另一个选项是指定在创建临时表时使用的排序规则。

create table #TempTable
(
  Name varchar(10) collate database_default
)  

然后,您的比较将正常工作,因为所有表格字符字段与数据库具有相同的排序规则。

答案 2 :(得分:0)

DECLARE @SQLCollation NVARCHAR(1000)
SELECT @SQLCollation = 'ALTER DATABASE MyDb COLLATE '+CAST(DATABASEPROPERTYEX('Tempdb', 'Collation') as NVARCHAR(1000))
exec (@sqlcollation)