将列整理为 SQL 默认整理

Collate column to SQL default collation

我正在尝试将列整理为 SQL 默认整理,但无法正常工作。

我看到的所有答案都与数据库默认值有关,而不是 SQL 默认值

我试过 Alter table x alter column name nvarchar(max) COLLATE DATABASE_DEFAULT 但它会给我数据库默认值,这与 SQL 默认值不同。 (希伯来语 vs SQL_LATIN)

我也在尝试用 select 来做,但似乎不可能。

这是我试过的: Alter table x alter column name nvarchar(max) COLLATE (Select SERVERPROPERTY('collation'))

要检查服务器级排序规则,请使用:

 SELECT CONVERT (varchar(256), SERVERPROPERTY('collation'));

要更改列杠杆排序规则,请使用:

ALTER TABLE myTable ALTER COLUMN mycol NVARCHAR(10) COLLATE Greek_CS_AI;  //Replace Greek_CS_AI with the actual value.

正如@Serg 所说,您可以使用动态 sql。试试下面的代码:

SELECT  [name], [collation_name] 
FROM    sys.columns 
WHERE   [object_id] = OBJECT_ID( N'x.dbo.x', N'U') /*table name*/
    AND [name] = 'name'                            /*column name*/

DECLARE @sql nvarchar(max)
,       @ServerCollation nvarchar(100)

SELECT @ServerCollation = CAST( SERVERPROPERTY( N'Collation') AS nvarchar(max))
SELECT @sql = 'ALTER TABLE dbo.x ALTER COLUMN [name] nvarchar(max) COLLATE ' + @ServerCollation
EXECUTE sp_executesql @sql

SELECT  [name], [collation_name] 
FROM    sys.columns 
WHERE   [object_id] = OBJECT_ID( N'x.dbo.x', N'U') 
    AND [name] = 'name'