2010-01-21 76 views
1

SQL Server 2005中是否有一種有效的方法將一行數據讀入字符串?T SQL將行轉換爲字符串

例如,如果我的表看起來像下面這樣:

ID | First Name | Last Name | Color 
----------------------------------- 
1 | Timmy  | Jones  | pink 
2 | Martha  | Fisher | green 

那我能拿回來的結果:

'1 Timmy Jones pink' 
'2 Martha Fisher green' 

最好我能回來與附加諸如列名:

'ID: 1, First Name: Timmy, Last Name: Jones, Color: pink' 
'ID: 2, First Name: Martha, Last Name: Fisher, Color: green' 

更新:

我正在尋找一個動態的解決方案,所以我想查詢INFORMATION_SCHEMA會更合適。

這實際上有點幫助,因爲我期待從更新觸發器設置它,所以我將一次一行,並且我可以根據INFORMATION_SCHEMA查詢主表檢查數據類型以消除文本,生成的表格「插入」和「刪除」扼殺的ntext和圖像。

解決方案:(更新:不得不添加更多的代碼返回一個值)

-- passed in table name & schema 
DECLARE @table_name nvarchar(100) 
DECLARE @schema_name nvarchar(100) 

-- set initial value 
SET @table_name = 'my_table' 
SET @schema_name = 'dbo' 

-- Variable to hold query 
DECLARE @sql nvarchar(MAX) 
SET @sql = 'SELECT @row_stringOUT = ' 

-- Query columns meeting criteria and build query 
SELECT 
    -- Query as one string 
    @sql = (@sql + ' '' ' + COLUMN_NAME + ': '' + CASE WHEN ' + COLUMN_NAME + ' IS NULL THEN '''' WHEN ISDATE(' + COLUMN_NAME + ') = 1 THEN CONVERT(nvarchar(100), ' + COLUMN_NAME + ', 120) ELSE CAST(' + COLUMN_NAME + ' AS nvarchar(100)) END + ') 
FROM 
    INFORMATION_SCHEMA.COLUMNS 
WHERE 
    table_schema = @schema_name 
    AND 
    table_name = @table_name 
    AND 
    -- Filter out unuseable data types 
    data_type NOT IN ('text', 'ntext', 'image') 

-- Trim extra character before FROM statement then add FROM statement 
SELECT @sql = LEFT(@sql, LEN(@sql) - 1) + ' FROM ' + @table_name; 

-- Execute Query 
DECLARE @params nvarchar(MAX) 
SET @params = N'@row_stringOUT ntext OUTPUT'; 

DECLARE @ret_value nvarchar(MAX) 

EXEC sp_executesql 
    @sql 
    , @params 
    , @row_stringOUT = @ret_value OUTPUT 

SELECT @ret_value 

回答

1

你可以連接列。如果你想獲得列名,你就必須使用動態SQL,INFORMATION_SCHEMA視圖和查詢的一些混合...

SELECT cast(ID as varchar(10)) + ' ' + [First Name] + ' ' + [Last Name] + ' ' + Color 
FROM MyTable 
+0

我正在尋找一個動態的解決方案,所以我猜INFORMATION_SCHEMA是它的位置。 – databyss 2010-01-21 14:29:52

1

Select CAST(ID As Varchar(8)) + ' ' + [First Name] + ' ' + [Last Name] + ' ' + Color From TheTable

爲了得到你所提到的詳細格式:

Select 'ID: ' + CAST(ID As Varchar(8)) + ', First Name: ' + [First Name] + ', Last Name: ' + [Last Name] + ', Color: ' + Color From TheTable

編輯:現在假設ID是一個整數自動編號。 ajdams指出,最有可能的情況是這樣。

+0

這如果ID的類型爲int – ajdams 2010-01-21 14:19:49

+0

+1會給出錯誤 - 打我。我可以補充的一件事是,如果您想複製並粘貼結果,並且您正在SQL Server Management Studio中工作,則可以告訴它將數據作爲文本輸出。如果數據集很大,也可以輸出到文件。 – 2010-01-21 14:20:52

+0

ajdams是正確的,但你只需要使用Cast來克服異議。 – 2010-01-21 14:21:34

0

其實如果ID有INT解決方案帕特里克建議會給你一個數據類型轉換錯誤。你將不得不做這樣的事情

SELECT CAST(ID爲varchar(10))+ '' + [名] + '' +姓氏+ '' +顏色
FROM MYTABLE