2013-04-02 34 views
2

我們的C++應用程序能夠使用從SQL Server獲取排序列相關的元數據OLEDB API的(使用DBCOLUMN_COLLATINGSEQUENCEDBCOLUMN_TDSCOLLATION等),但我需要使用ODBC作爲我們的應用程序必須是跨平臺的。我們使用ODBC API SQLColAttribute來讀取行集元數據,但是此API沒有任何可以返回排序規則名稱的標識符。如何使用ODBC API讀取SQL Server列整理元數據?

我嘗試使用SQL_CA_SS_COLUMN_COLLATION(在sqlncli.h中定義)作爲標識符,但SQLColAttribute僅返回「整理名稱」作爲整理。

我也嘗試使用SQLGetStmtAttr後跟SQLGetDescField,使用相同的標識符,並且我得到了「排序規則名稱」。

我已經搜遍了所有MSDN的答案,但一直沒能找到任何。我可以從INFORMATION_SCHEMA.COLUMNS獲得排序規則名稱,但這對於查詢返回的計算列不起作用。

我正在尋找一種乾淨的方式,使用ODBC從結果集元數據中獲取排序規則信息。有任何想法嗎?

回答

0

此查詢將返回COLLATION_NAME每個存在於當前數據庫列。

SELECT o.name AS ObjectName, c.name AS ColumnName, c.collation_name 
FROM sys.columns c 
    INNER JOIN sys.objects o ON c.object_id = o.object_id 
    INNER JOIN sys.types ty ON c.system_type_id = ty.system_type_id 
WHERE o.is_ms_shipped = 0 
    AND ty.collation_name IS NOT NULL 
    AND ty.name <> 'sysname'; 
+0

謝謝。我無法使用ODBC獲取排序規則。我選擇查詢INFORMATION_SCHEMA.COLUMNS以獲取歸類信息。這對計算字段不起作用,但看起來這是我們能做的最好的。由Max提出的解決方案是類似於INFORMATION_SCHEMA.COLUMNS解決方案。 – user2237963

相關問題