0

名前の付いたテーブルがTBL_SUBACCあり、フィールドは次のとおりですAccount, Branch, Ftype, ArmCode,DrlsttrDate, CrlsttrDate, TelNo

現在|、次のクエリを使用して分離されたデータを取得しています。

select account +'|'+ branch +'|' + armcode as delimited_data from
   ReportingFramework.dbo.TBL_SUBACC

これにより、次の結果が得られます。

    delimited_data
    111123|01|C0013
    111124|01|C0013
    1234121|05|C0324
    0120219|02|C0329
    0212108|03|C3232
    111121|01|C0013

これはまさに私が欲しいものです。ただし、上記のクエリでは、すべてのフィールド名を手動で指定する必要があります。すべての列名を指定せずに、すべてのフィールドの区切りデータを取得したい。

select *テーブルから区切られたデータを取得するにはどうすればよいですか?

4

2 に答える 2

1

これを試してみてください -

クエリ:

DECLARE @table_name SYSNAME
SELECT @table_name = 'dbo.test'

DECLARE @SQL NVARCHAR(MAX);
SELECT @SQL = 'SELECT delimited_data = ' + STUFF((
    SELECT CHAR(13) + ' + ''|'' + ' + 
    CASE WHEN c.is_nullable = 1 
        THEN 'ISNULL(CAST(' + QUOTENAME(c.name) + ' AS NVARCHAR(MAX)),'''') '
        ELSE 'CAST(' + QUOTENAME(c.name) + ' AS NVARCHAR(MAX))'
    END
    FROM sys.columns c WITH (NOWAIT)
    WHERE c.[object_id] = OBJECT_ID(@table_name)
    ORDER BY c.column_id
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 10, CHAR(13)) + '
FROM ' + @table_name

PRINT @SQL

EXEC sys.sp_executesql @SQL

出力:

SELECT delimited_data = 
             CAST([WorkOutID] AS NVARCHAR(MAX))
     + '|' + CAST([DateOut] AS NVARCHAR(MAX))
     + '|' + CAST([EmployeeID] AS NVARCHAR(MAX))
     + '|' + CAST([DepartmentUID] AS NVARCHAR(MAX))
     + '|' + ISNULL(CAST([WorkPlaceUID] AS NVARCHAR(MAX)), '') 
     + '|' + ISNULL(CAST([CategoryID] AS NVARCHAR(MAX)), '') 
FROM dbo.test
于 2013-05-20T10:27:22.880 に答える