能否在TM1 TurboIntegrator流程中导入文本文件的SQL代码并执行?
解决TM1 TurboIntegrator读取文本文件中SQL代码的问题
嘿,我来帮你搞定这个TI脚本的问题!你现在的代码在语法和逻辑上有几处小问题,我给你梳理下并修正:
现有代码的问题点
- 文件打开时变量错误:
open('vInFileName',read,In)里把变量名加了引号,TI会把'vInFileName'当成一个字面量文件名,而不是读取你定义的变量值,得去掉引号。 - 循环语法错误:TI里的
repeat循环不能像你那样直接跟在open后面,需要用标准的repeat...endrepeat结构配合文件末尾判断。 - 字符串拼接方式错误:
writef是用来输出内容到日志/控制台的,不能用来拼接字符串变量,TI里要用||来做字符串拼接。
修正后的完整TI代码
# 定义存储SQL的文本文件路径 vInFileName = 'c:\documents\code.txt'; # 初始化空字符串来存储读取到的SQL s_SQL = ''; # 尝试打开文件,返回1表示成功打开 if( open(vInFileName, 'r', In) = 1 ); # 循环读取每一行内容 repeat; read_line(In, s_Line); # 判断是否已到文件末尾,是则退出循环 if( eof(In) = 1 ); break; endif; # 把每行内容拼接到SQL变量,加上换行符保证SQL格式正确 s_SQL = s_SQL || s_Line || chr(10); endrepeat; # 记得关闭文件 close(In); else; # 如果文件打不开,触发流程错误 ProcessError; endif; # 将读取到的SQL输出到验证文件(可选,用于确认内容是否正确) vOutFileName = 'c:\documents\output.txt'; ASCIIOUTPUT(vOutFileName, s_SQL); # 如果你要执行这个SQL,添加下面的代码(替换成你的ODBC数据源名称) # ODBCExecute('你的ODBC数据源名称', s_SQL);
代码说明
- 文件操作逻辑:先用
open函数打开文件,判断是否成功;然后用repeat循环逐行读取,通过eof()判断是否到文件末尾,避免死循环。 - 字符串拼接:用
||把每行内容拼接到s_SQL变量,chr(10)是换行符,确保读取的SQL保持原有的格式(比如换行分隔的语句)。 - 错误处理:增加了文件打开失败时的
ProcessError,这样流程会直接报错,不会静默执行导致后续问题。 - SQL执行:如果需要直接执行读取到的SQL,取消最后一行
ODBCExecute的注释,替换成你的实际ODBC数据源名称即可。
内容的提问来源于stack exchange,提问作者Akshath Cm
相关产品推荐
相关产品推荐

