Sql server 2008 右对齐提取的数值不规则文件列中的值
我正在使用SQL创建一个“Ragged right”(固定)格式的文件,以指定要提取的数据Sql server 2008 右对齐提取的数值不规则文件列中的值,sql-server-2008,ssis,Sql Server 2008,Ssis,我正在使用SQL创建一个“Ragged right”(固定)格式的文件,以指定要提取的数据 SELECT 'D' AS DTL_REC_TYP ,CAST(CONVERT(VARCHAR, dbo.GetCycleDate(), 120) AS CHAR(10)) AS DTL_FILE_GL_DT ,CAST(CONVERT(VARCHAR,
SELECT
'D' AS DTL_REC_TYP
,CAST(CONVERT(VARCHAR, dbo.GetCycleDate(), 120) AS CHAR(10)) AS DTL_FILE_GL_DT
,CAST(CONVERT(VARCHAR, GETDATE(), 120) AS CHAR(19)) AS DTL_FILE_CREATE_DT
,LEGAL_ENTTY_CD AS DTL_LEGAL_ENTITY
,CLIENT_ID AS DTL_CLIENT_ID
,ACCT_NUM AS DTL_ACCT_NUM
,BEN_OPT_CD AS DTL_BEN_OPT_CD
FROM
MyTable
Client_ID是数据库中的一个INT列
问:如何使值在列中正确对齐
我曾考虑更改SQL以实现此目的,但这似乎很难看:
,RIGHT('000000000' + CAST(CLIENT_ID As varchar(9)),9) AS DTL_CLIENT_ID
或
在SSIS中是否有比T-SQL更好的方法来执行此操作。如果不是,在T-SQL中是否有更好的方法?在我看来,固定平面文件的格式应该或者至少可以在SSIS中单独定义,而SQL
在SQL中进行格式化很难看,但确实有效 我更喜欢在数据流任务的脚本组件中进行格式化,主要是因为String.Format比T-SQL中的任何东西都强大。在这种情况下,脚本将位于您选择的DB数据源和平面文件目标之间 您可以将查询更改为以下内容:
SELECT
'D' AS DTL_REC_TYP
,dbo.GetCycleDate() AS FILE_GL_DT
,GETDATE() AS FILE_CREATE_DT
,LEGAL_ENTTY_CD AS DTL_LEGAL_ENTITY
,CLIENT_ID
,ACCT_NUM AS DTL_ACCT_NUM
,BEN_OPT_CD AS DTL_BEN_OPT_CD
FROM
MyTable
不再尝试转换SQL中的数字。查询中的所有列都将成为脚本组件的输入列。对于要格式化的每个列,向脚本组件添加一个数据类型为DT_WSTR且具有适当宽度的输出列。在脚本组件本身中,只需向ProcessInputRow事件添加代码:
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
Row.DTL_CLIENT_ID = String.Format("{0:000000000}", Row.CLIENT_ID);
// Do similar formatting for dates, money, whatever
}
然后您的平面文件目标仅使用字符串输出列。这与我通常的想法非常相似。我试试看。
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
Row.DTL_CLIENT_ID = String.Format("{0:000000000}", Row.CLIENT_ID);
// Do similar formatting for dates, money, whatever
}