我的应用程序的数据库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相同的排序规则?
答案 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)