2010-03-22 43 views
3

我有一個基本上在傳統數據庫中布爾值的表。列名稱作爲字符串值存儲在另一個表中,所以我需要將一個表的列名與另一個表中的字符串值進行匹配。我知道必須有一種方法可以直接在SQL Server中使用SQL,但它不在我身邊。如何將列名轉換爲SQL Server中的結果值?

我最初的想法是使用PIVOT,但默認情況下它並未啓用,並且將該更改推送到生產數據庫時啓用它可能會是一個困難的過程。我寧願使用默認啓用的內容。

我正在考慮使用COALESCE將布爾值轉換爲我需要的值的字符串。這將是一個手動過程。

我想我還會使用一個表變量來將第一個查詢的結果插入到該變量中,並使用這些結果來執行第二個查詢。我仍然有問題,列是在一個單一的行上,所以我希望我可以輕鬆地轉換值以將字段名作爲字符串放在結果集中。但是,如果我可以輕鬆地做到這一點,我可以輕鬆地使用子選擇來編寫查詢。

歡迎任何提示。

+0

PIVOT和UPIVOT由「默認」啓用。如果您以向後兼容模式運行,它們不會啓用,但這不是「默認」。如果在2010年發現自己編寫變通方法是因爲您將數據庫保持在SQL 2000兼容模式下,那麼您應該自問自問爲什麼在我的情況下仍然使用SQL 2000兼容模式... – 2010-03-22 21:04:24

+0

我在兼容性級別檢查了SQL Server 2000 。在沒有單元測試的情況下更改它非常危險。 「exec sp_dbcmptlevel LegacyDatabase」 – Brennan 2010-03-22 21:10:48

+0

我並不是說不用UT來改變它。我在說,如果你正在開發*新的代碼來解決後臺兼容問題,或許是時候重新審視兼容級別並投入一些努力來使其更新,所以你不必花費精力去做工作。 – 2010-03-22 23:37:41

回答

1

簽出SQL Server中的Sysobjects和SysColumns。它們是2個SQL表,它們爲您提供數據庫中表的名稱以及與該表一起使用的列的名稱。

系統視圖INFORMATION_SCHEMA.COLUMNS也會給你你想要的。

0

如果您對.Net感到滿意,您可以使用自己選擇的語言編寫自己的存儲過程,然後使用代碼操作數據。

繼承人的鏈接上手 CLR Stored Procedures

0

我不太知道我理解你的設計目前是如何放在一起(你可以張貼的例子嗎?),但INFORMATION_SCHEMA.COLUMNS查看會給你一個包含所有列名稱作爲字符串值的表。如果你加入你的第二張桌子,我想你可能會得到你需要的東西。

1

您可以構建一個SQL字符串,然後將該字符串作爲查詢執行。不是最漂亮的,但我認爲它會按照你想要的方式工作。您只需使用遊標或while循環來構建字符串。

0

比如我有有3列STATEtbl一個表,我想這個表的所有列名作爲行值...我使用下面的查詢

Select SC.name as Columns from Syscolumns SC 
Join Sysobjects SO On SC.id = SO.Id 
where Object_name(SO.Id) = 'STATEtbl' 

結果查詢:

Columns 
-------- 
State 
StateCode 
StateFullName 
相關問題