T SQL将行转换为字符串

时间:2010-01-21 14:10:53

标签: sql sql-server-2005 tsql

SQL Server 2005中有一种有效的方法可以将一行数据读入字符串吗?

例如,如果我的表格如下所示:

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

3 个答案:

答案 0 :(得分: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指出的那样。

答案 1 :(得分:1)

你可以直接列。如果你想获得列名,你必须使用一些动态sql,INFORMATION_SCHEMA视图和查询......

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

答案 2 :(得分:0)

实际上,如果ID的数据类型为int,那么Patrick建议的解决方案会给您一个转换错误。你必须做这样的事情

SELECT CAST(ID AS varchar(10))+''+ [名字] +''+ [姓氏+''+颜色
来自MYTABLE