SSIS保存字符串变量到文本文件(SSIS save string variable to text

2019-07-29 03:25发布

现在看来似乎应该是简单的,但作为然而我还没有找到一种方法来节省存储在SSIS字符串变量到一个文本文件中的值。 我看了使用数据流内的平面文件目标,但需要一个数据流源。

如何做到这一点任何想法?

Answer 1:

下面是一些代码,在C#中的SQL CLR工作一点样品。 你需要,如果你是2005年,我相信在使用VB。 脚本任务也需要读变量属性设置为MyVariable的,使您的变量的值提供给它。

// create a writer and open the file

TextWriter tw = new StreamWriter("\\\\server\\share$\\myfile.txt");

// write a line of text to the file

tw.WriteLine(Dts.Variables["MyVariable"].Value);

// close the stream
tw.Close();


Answer 2:

使用脚本任务。


我只是尝试这样做。 我创建了一个文件连接管理器,与连接字符串指着我想写的文件。 然后,我创建了一个包含写文本字符串变量。

我添加了一个脚本任务,在只读变量列表中指定我的字符串变量,然后单击编辑脚本。 该脚本如下:

    public void Main()
    {
        ConnectionManager cm = Dts.Connections["File.tmp"];
        var path = cm.ConnectionString;
        var textToWrite = (string)Dts.Variables["User::StringVariable"].Value;
        System.IO.File.WriteAllText(path, textToWrite);

        Dts.TaskResult = (int)ScriptResults.Success;
    }

这个工作,没有任何问题。



Answer 3:

它所需要的是一个简单的脚本任务的一行代码。 没有其他的相关性,比如连接管理器,是必要的。

下面是它看起来像在C#:

public void Main()
{
    string variableValue = Dts.Variables["TheVariable"].Value.ToString();
    string outputFile = Dts.Variables["Path"].Value.ToString();

    System.IO.File.WriteAllText(outputFile, variableValue);

    Dts.TaskResult = (int)ScriptResults.Success;
}

显然,这里最重要的行是包含WriteAllText函数调用的一个。

PATH变量应包含输出文件的完整路径+文件名。



Answer 4:

它可以使用派生列转换到一个变量的值写入一列。 问题是,它需要一个源来驱动它,而且也没有,你可以使用只吐出一个空行到管道库存数据源。

所以,要么你重新调整单行源来驱动派生列转换,或者你做什么另一个答案建议,并做了脚本源。



Answer 5:

我做到了,你所描述的方式。 我已经定义的OLEDB连接管理器,所以我使用的OLE DB源和使用的SQL命令的数据访问模式。 我用一个简单的查询:

select getdate() as dt

...只是把它弄出来的方式。 现在我知道我变拉的日期。 然后我用一个派生列变换,使可我包变量,写出来给一个平面文件。

优雅? 没有,但它能够完成任务。



Answer 6:

比方说,你不想用脚本任务很乱,你没有,你可以连接到刚刚发出数据源命令如数据库:

SELECT 'Some arbitrary text' 

还有几种方法使用流程任务如写一行文本到一个文件一样简单。 例如,你可以使用PowerShell使用以下表达式建立了一个输入变量:

"'"+REPLACE(@[User::Text],"'","''")+"' > '"+REPLACE(@[User::Filename],"'","''")+"'"

请注意,我躲过了名,因为单引号是合法的存在。 另外请注意我用“>”用于重定向如果存在,其覆盖该文件。 如果我想追加我会使用“>>”。

最初,我曾与当用户::文本包含多行这种方法麻烦。 事实证明,你需要在文件名后,一些额外的EOL字符时的命令行跨越。 像这样:

"'"+REPLACE(@[User::Text],"'","''")+"' > '"+REPLACE(@[User::Filename],"'","''")+"'\r\n\r\n"

使用CMD.EXE回声是有点更不稳定,但也可以在某些情况下工作,并要少得多的开销。

PS我已经注意到使用PowerShell的一些版本的StandardInputVariable内容没有这种忽略:

-Command - 

在参数框中。 一个孤独的减号作为命令的说法是“神奇”,并在记录https://docs.microsoft.com/en-us/powershell/scripting/powershell.exe-command-line-help 。 我相信PowerShell中的所有版本接受这个帕拉姆所以即使它不要求你,你可能要包括它,因为它不应该破坏任何东西,并且可能使你的代码,如果PowerShell是更新给需要它的一个版本打破版本。



文章来源: SSIS save string variable to text file