现在看来似乎应该是简单的,但作为然而我还没有找到一种方法来节省存储在SSIS字符串变量到一个文本文件中的值。 我看了使用数据流内的平面文件目标,但需要一个数据流源。
如何做到这一点任何想法?
现在看来似乎应该是简单的,但作为然而我还没有找到一种方法来节省存储在SSIS字符串变量到一个文本文件中的值。 我看了使用数据流内的平面文件目标,但需要一个数据流源。
如何做到这一点任何想法?
下面是一些代码,在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();
使用脚本任务。
我只是尝试这样做。 我创建了一个文件连接管理器,与连接字符串指着我想写的文件。 然后,我创建了一个包含写文本字符串变量。
我添加了一个脚本任务,在只读变量列表中指定我的字符串变量,然后单击编辑脚本。 该脚本如下:
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;
}
这个工作,没有任何问题。
它所需要的是一个简单的脚本任务的一行代码。 没有其他的相关性,比如连接管理器,是必要的。
下面是它看起来像在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变量应包含输出文件的完整路径+文件名。
它可以使用派生列转换到一个变量的值写入一列。 问题是,它需要一个源来驱动它,而且也没有,你可以使用只吐出一个空行到管道库存数据源。
所以,要么你重新调整单行源来驱动派生列转换,或者你做什么另一个答案建议,并做了脚本源。
我做到了,你所描述的方式。 我已经定义的OLEDB连接管理器,所以我使用的OLE DB源和使用的SQL命令的数据访问模式。 我用一个简单的查询:
select getdate() as dt
...只是把它弄出来的方式。 现在我知道我变拉的日期。 然后我用一个派生列变换,使可我包变量,写出来给一个平面文件。
优雅? 没有,但它能够完成任务。
比方说,你不想用脚本任务很乱,你没有,你可以连接到刚刚发出数据源命令如数据库:
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是更新给需要它的一个版本打破版本。