Sql-Server-2016

是否可以在 MSSQL 2016 上編輯分區函式?

  • November 28, 2020

我繼承了一個有數百萬行的分區數據庫,我注意到分區函式中有一個錯字:

CREATE PARTITION FUNCTION [Partition_by_customer](varchar(10)) AS RANGE RIGHT FOR VALUES (N'DMA', N'DMB', N'DMC', N'DMD', N'DME')

有沒有一種簡單的方法可以刪除那些 unicode 轉換器(因為它們會導致隱式轉換),一切都應該是 varchar(10)

謝謝羅傑

Unicode 文字到的隱式轉換是在varchar執行 DDL 時完成的一次性操作。“typo”(“N”國家字元前綴)不是分區函式定義的一部分,也不是 SQL Server 在創建後使用的。Unicode 文字由 SMO 在編寫函式定義腳本時生成。

實際邊界值是一種SQL_VARIANT類型,並且與分區函式數據類型定義匹配,而與指定的文字無關。下面的目錄視圖查詢顯示了這一點:

SELECT
     prv.value AS BoundaryValue
   , SQL_VARIANT_PROPERTY(value, 'BaseType') AS DataType
   , SQL_VARIANT_PROPERTY(value, 'MaxLength') AS Length
FROM sys.partition_functions AS pf
JOIN sys.partition_range_values AS prv ON prv.function_id = pf.function_id
WHERE pf.name = N'Partition_by_customer';

結果:

+---------------+----------+--------+
| BoundaryValue | DataType | Length |
+---------------+----------+--------+
| DMA           | varchar  |     10 |
| DMB           | varchar  |     10 |
| DMC           | varchar  |     10 |
| DMD           | varchar  |     10 |
| DME           | varchar  |     10 |
+---------------+----------+--------+

引用自:https://dba.stackexchange.com/questions/280505