Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 右对齐提取的数值不规则文件列中的值_Sql Server 2008_Ssis - Fatal编程技术网

Sql server 2008 右对齐提取的数值不规则文件列中的值

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,

我正在使用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, 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
}