Есть ли допустимый способ в 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