SQL Server转换数据库的排序规则

说实话,排序规则还是挺有趣的。
第一次接触SQL Server的时候走了很长的弯路。
说白了,它就像一本字符编码的“规则书”,规定了如何排列和比较文本中的字符。
如果你仔细想想,不同的语言对字母顺序的理解是不同的。
例如,字母“ä”在德语中位于“a”之后,但在英语中可能并不那么独特。

让我印象最深的是在处理跨境数据迁移时遇到的问题。
我曾经帮助客户将西欧数据库迁移到东美服务器。
由于排序规则不匹配,德国客户的姓名被乱序排序。
SQL Server 的默认排序规则是“SQL_Latin1 _General_CP1 _CI_AS”,它对德语的支持特别差。
说实话,当时我自己并没有完成完整的迁移过程,但根据数据来看,备份和恢复在这种情况下并不能挽救生命——如果恢复数据库,排序规则将保持不变。

重点来了。
虽然SQL Server官方并不支持多排序规则数据库,但在实际操作中你可以使用COLLATE子句来指定列排序规则。
我在项目中使用了这种有趣的操作:将订单表中的客户名称列仅设置为“German_Princedom_CI_AS”规则,并将其他字段保留为默认值。
由于导入数据时出现案例对比错误,调试了半天。

DTS中的“使用排序规则”选项也值得一提。
有一次我在做数据同步的时候,发现源端是Russian Windows-1 2 5 1 编码,目的端是SQL Server Latin1 _General。
直接传输会出现乱码,但选择该选项后,数据会先转换为目标代码页后再传输。
不过,请记住,如果源表列使用了 COLLATE 子句,这个东西根本就不起作用——我当时很郁闷,最终发现必须使用 sp_addcollat​​ion 来手动更改。

最令人惊讶的是主数据库排序规则是如何工作的。
我曾经帮助一个朋友重建了一个大师,这个过程就像拆除炸弹一样。
您需要提前备份msdb和模板,导出您的登录信息,并生成所有工作脚本。
说实话,我的手都在颤抖,差点就把模型数据库给删了。
幸好我发现得及时。
重建后,所有用户数据库都必须从备份中恢复或使用 sp_attach_db 重新连接,这个过程值得惊悚。

但最大的问题是SQL Server版本之间的迁移。
例如,将数据库从2 008 R2 版本迁移到2 01 6 版本,默认排序规则不变,但传输过程中数据会出现乱码。
此时,需要在使用DTS传输数据之前更改脚本中的排序规则,然后在传输时选择“使用排序规则”。
我测试了三天,发现如果我在目的端创建数据库时指定了新的规则,并在传输数据之前删除了源脚本中的所有COLLATED子句,成功率可提高至9 0%。

现在回想起来,排序规则就像语言翻译器。
如果处理不当,整个数据库就会混乱。
如果你想一想,如果德国姓氏按照英语规则排序,“Müller”可能会成为第五个。
谁不会生气呢?所以,在当前的项目中,我宁愿花更多的时间在数据库创建过程中指定COLLATE属性,而不是稍后修改它。

sql升序降序排列(sqlserver降序排列)

嗯...确切地说,这个 SQL 排序的事情...
让我给你举个例子。
我用它在2 02 2 年的上海进行了一次数据库查询。
当时我正在查找一个名为kc的表,其中包含大量数据。

我只想按名为 cpbh 的字段排序。
该字段必须按降序排序。
编写的SQL为:
sql 从 kc 中选择 按 cpbh DESC 排序
然后有时你必须按升序排序。
例如,如果要查看另一个名为students_information的表,则需要查看学生的姓名和学号,并按学号升序排序。
SQL 是:
sql 从学生信息中选择姓名、StuID ORDER BY StuID ASC
只需这个 ORDER BY,后跟字段名称,然后是 DESC 或 ASC。
DESC 是降序,ASC 是升序。
如果不写任何内容,则默认为升序。

后来才知道这个ORDER BY是用来排序的。
按哪个字段排序并写下哪个字段名称。
按升序或降序排序,写为 ASC 或 DESC。

就是这样。
没有别的了。