我们正试图将我们的数据库放在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(逻辑服务器)时,我看不到任何内容。这样可以省去我们在任何地方强制整理的麻烦。
答案 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做到这一点。
答案 2 :(得分:0)
以下是基于命令行的过程,Microsoft技术支持人员引导我完成了该过程,使用sqlpackage导出,修改和创建新数据库。此方法有效,而使用SSMS的等效过程导致错误842。
导出:sqlpackage.exe /Action:Export /ssn:{database-server}.database.windows.net /sdn:{database} /su:{user-name} /sp:{password} /tf:{local-bacpac-path}
重命名.bacpac
文件,使其以.zip
结尾。
从邮政编码model.xml
和Origin.xml
中提取。
在model.xml
中,编辑DataSchemaModel/Model/Element[Type="SqlDatabaseOptions"]/Property[Name="Collation"]
。
将以下脚本保存到hash.ps1
,然后从PowerShell中运行hash.ps1
。出现提示时,请指定model.xml
的路径。的脚本将打印model.xml
的哈希值。
在Origin.xml
中,使用新的哈希更新DacOrigin/Checksums/Checksum[Uri="/model.xml"]
。
使用更新的model.xml
和Origin.xml
文件更新zip。
重命名zip文件,使其重新以.bacpac
结尾。
导入: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
使用Standard
和S1
来代替与您的工作量相匹配的数据库版本和服务目标。
$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