将列整理为 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'
我正在尝试将列整理为 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'