更改Azure SQL Server排序规则

时间:2016-07-14 11:45:10

标签: azure-sql-database collation

我们正试图将我们的数据库放在sql azure中,我们遇到了一个问题。我们有一个归类 Latin1_General_CI_AI 的存储过程,并且在 sys.objects 中有一些连接,它们的排序规则为 SQL_Latin1_General_CP1_CI_AS 。当我们尝试创建存储过程时,我们得到错误

  

无法在等于操作的情况下解决“SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_CI_AI”之间的排序规则冲突。

我们可以通过在 sys.object 连接的末尾添加 COLLATE SQL_Latin1_General_CP1_CI_AS 来创建存储过程,但我们有多个地方使用sys.object并且我还读到临时表可能有同样的问题。

所以我的问题是,有没有办法在“服务器”上更改排序规则,在创建新的 SQL Server(逻辑服务器)时,我看不到任何内容。这样可以省去我们在任何地方强制整理的麻烦。

3 个答案:

答案 0 :(得分:2)

目前,无法更改现有Azure SQL数据库的排序规则。但是,可以指定创建数据库时的排序规则。 如果您通过Azure Portal进行创建,您将在“创建”对话框中看到“排序规则”选项。请在此处查看一些详细信息:https://azure.microsoft.com/en-us/documentation/articles/sql-database-get-started/#create-a-new-azure-sql-database

答案 1 :(得分:2)

我能够使用bacpac做到这一点。

  1. 使用管理工作室中的“导出数据层应用程序”导出数据库
  2. 制作bacpac的副本
  3. 通过将扩展名更改为.zip
  4. 来重命名副本
  5. 打开zip并打开model.xml文件(使用7-zip打开zip,然后双击打开记事本中的xml。编辑并保存)
  6. 更改属性名称=“排序规则”值=“Latin1_General_CS_AS”
  7. 将拉链重命名为bacpac
  8. bacpac确实包含用于验证包的校验和。这需要更新。强有力的是dacchksum.exe实用程序的git副本。只需针对新的bacpac运行以获得校验和值。
  9. 将bacpac重命名为zip
  10. 在zip中,打开origin.xml并更新校验和
  11. 将拉链重命名为bacpac
  12. 再次尝试导入!

答案 2 :(得分:0)

以下是基于命令行的过程,Microsoft技术支持人员引导我完成了该过程,使用sqlpackage导出,修改和创建新数据库。此方法有效,而使用SSMS的等效过程导致错误842。

  1. 导出:sqlpackage.exe /Action:Export /ssn:{database-server}.database.windows.net /sdn:{database} /su:{user-name} /sp:{password} /tf:{local-bacpac-path}

  2. 重命名.bacpac文件,使其以.zip结尾。

  3. 从邮政编码model.xmlOrigin.xml中提取。

  4. model.xml中,编辑DataSchemaModel/Model/Element[Type="SqlDatabaseOptions"]/Property[Name="Collation"]

  5. 将以下脚本保存到hash.ps1,然后从PowerShell中运行hash.ps1。出现提示时,请指定model.xml的路径。的脚本将打印model.xml的哈希值。

  6. Origin.xml中,使用新的哈希更新DacOrigin/Checksums/Checksum[Uri="/model.xml"]

  7. 使用更新的model.xmlOrigin.xml文件更新zip。

  8. 重命名zip文件,使其重新以.bacpac结尾。

  9. 导入:sqlpackage.exe /Action:Import /tsn:{database-server}.database.windows.net /tdn:{database} /tu:{user-name} /tp:{password} /sf:{local-bacpac-path} /p:DatabaseEdition=Standard /p:DatabaseServiceObjective=S1

    使用StandardS1来代替与您的工作量相匹配的数据库版本和服务目标。


hash.ps1

$modelXmlPath = Read-Host "model.xml file path"
$hasher = [System.Security.Cryptography.HashAlgorithm]::Create("System.Security.Cryptography.SHA256CryptoServiceProvider")
$fileStream = New-Object System.IO.FileStream -ArgumentList @($modelXmlPath, [System.IO.FileMode]::Open)
$hash = $hasher.ComputeHash($fileStream)
$hashString = ""
Foreach ($b in $hash) { $hashString += $b.ToString("X2") }
$fileStream.Close()
$hashString