ama*_*eur 4 sql-server sql-server-2012
我有一个 SQL Server 数据库,其中设置了排序规则。但是我遇到了问题,因为数据库中某些列的排序规则与数据库排序规则不同。
我想从列中删除排序规则并使用数据库上的排序规则集。
我正在使用 SQL Server 2012。
我怎样才能做到这一点?脚本可以做到这一点吗?
mar*_*c_s 14
使用此处的脚本,您可以找到与数据库默认值不匹配的所有列:
DECLARE @DatabaseCollation VARCHAR(100)
SELECT
@DatabaseCollation = collation_name
FROM
sys.databases
WHERE
database_id = DB_ID()
SELECT
@DatabaseCollation 'Default database collation'
SELECT
t.Name 'Table Name',
c.name 'Col Name',
ty.name 'Type Name',
c.max_length,
c.collation_name,
c.is_nullable
FROM
sys.columns c
INNER JOIN
sys.tables t ON c.object_id = t.object_id
INNER JOIN
sys.types ty ON c.system_type_id = ty.system_type_id
WHERE
t.is_ms_shipped = 0
AND
c.collation_name <> @DatabaseCollation
Run Code Online (Sandbox Code Playgroud)
对于这些列中的每一列,您可以执行这个简单的命令将它们的排序规则更改为数据库默认值:
ALTER TABLE dbo.YourTable
ALTER COLUMN YourColumn VARCHAR(50) COLLATE DATABASE_DEFAULT
Run Code Online (Sandbox Code Playgroud)
如果你真的想要,你也可以将两者结合起来 -SELECT在第一个脚本的语句上使用游标,然后迭代结果并为找到的每一列执行第二个语句 - 我通常更喜欢手动执行此操作,以便更清楚我在做什么(以及我改变了多少):
| 归档时间: |
|
| 查看次数: |
14416 次 |
| 最近记录: |