今天碰到舊系統新增一個table後 下join語法會出現定序問題
所以查了一下如何找整個DB與table column定序去釐清
所以查了一下如何找整個DB與table column定序去釐清
今天碰到就系統新增一個table後 下join語法會出現定序問題
所以查了一下如何找整個DB與table column定序
所以查了一下如何找整個DB與table column定序
--列出目前資料庫裡,欄位定序與資料庫定序不同的所有欄位
SELECT t.name [table name] ,c.name [column name],c.collation_name [collation_name],DATABASEPROPERTYEX(DB_NAME(),'collation') [db collation_name]
SELECT t.name [table name] ,c.name [column name],c.collation_name [collation_name],DATABASEPROPERTYEX(DB_NAME(),'collation') [db collation_name]
FROM sys.tables t INNER JOIN sys.columns c
ON t.object_id = c.object_id AND c.collation_name <> CONVERT(NVARCHAR(128),DATABASEPROPERTYEX(DB_NAME(),'collation'))
--列出資料庫裡中設為某個定序的所有欄位
SELECT
t.name [table name] ,c.name [column name],c.collation_name [collation_name ]
FROM sys.tables t INNER JOIN sys.columns c
ON t.object_id = c.object_id AND c.collation_name = 'Chinese_Taiwan_Stroke_CI_AS'
找到之後若欄位可以改定序就用下列語法將欄位定序換掉
ALTER TABLE TableA ALTER COLUMN Column1 VARCHAR(12) COLLATE Chinese_Taiwan_Stroke_90_CI_AS
若不能改定序,其實也只要在那出錯的語法後面指定要使用的定序即可
若不能改定序,其實也只要在那出錯的語法後面指定要使用的定序即可
SELECT * FROM tableA a
WHERE EXISTS (SELECT * FROM tableB b WHERE a.Id = b.Id collate Chinese_Taiwan_Stroke_90_CI_AS)