我的数据库带有一个包含详细信息表的主表,让我们说
Master (ID, MField1)
Det (ID, IDMaster, DetField1)
我需要导出一个固定列大小的平面文件,其中包含主行和详细信息行,这些文件位于记录的下方'结构:
主记录:
Position Desc Length Default
1 RecordType 1 'M'
2 ID 10
3 MField1 10
详细记录:
Position Desc Length Default
1 RecordType 1 'D'
2 ID 10
3 MasterID 10
4 MField1 10
例如,如果我在主(1,'MFieldVal1'),(2,'MFieldVal2')
中有2行而在Det (1,1,'DFieldVal1'),(2,1,'DFieldVal2'),(3,2,'DFieldVal3')
中有3行
我导出这样的文件:
M 1MFieldVal1
D 1 1DFieldVal1
D 2 1DFieldVal2
M 2MFieldVal2
D 3 2DFieldVal3
到目前为止,我构建了一个连接Master和Det的视图,并将其用作数据流的来源,但我不知道如何在导出文件中的详细信息之前创建标题行。
我怎样才能实现这个目标?
答案 0 :(得分:0)
您可以使用类似OLEDB Source
的{{1}}来生成类型为SqlCommand
的列,其中包含您需要导出到平面文件的整行。
注意:如果需要,平面文件必须只包含NVARCHAR
类flat file connection manager
中的一列,长度等于DT_WSTR
或更高,并映射从sqlCommand生成的列它
4000
我在sql server中做了一个小实验
SELECT CAST(DataRow as NVARCHAR(4000)) as DataRow FROM (
SELECT ID ,'M' as RowType ,
'M ' + CAST(ID as VARCHAR(255)) + ' ' + MField1 AS DataRow
FROM Master
UNION ALL
SELECT IDMASTER ,'D' as RowType,
'D ' + CAST(ID as VARCHAR(255)) + ' ' + CAST(IDMASTER as VARCHAR(255)) + ' ' + DetField1 AS DataRow
FROM Det
) AS TBL
ORDER BY ID ASC, RowType DESC
结果是
重要提示
CREATE TABLE #Master (ID INT, MField1 VARCHAR(255))
CREATE TABLE #Det (ID INT, IDMaster INT , DetField1 VARCHAR(255))
INSERT INTO #Master(ID, MField1)
VALUES (1,'MFieldVal1'),(2,'MFieldVal2')
INSERT INTO #Det(ID, IDMASTER,DetField1)
VALUES (1,1,'DFieldVal1'),(2,1,'DFieldVal2'),(3,2,'DFieldVal3')
SELECT CAST(DataRow as NVARCHAR(4000)) as DataRow FROM (
SELECT ID ,'M' as RowType , 'M ' + CAST(ID as VARCHAR(255)) + ' ' + MField1 AS DataRow FROM #Master
UNION ALL
SELECT IDMASTER ,'D' as RowType, 'D ' + CAST(ID as VARCHAR(255)) + ' ' + CAST(IDMASTER as VARCHAR(255)) + ' ' + DetField1 AS DataRow FROM #Det) AS TBL
ORDER BY ID ASC, RowType DESC
包含一个Flat File
类型的列,但实际上它包含DT_WSTR
个分隔的列。