SQL 输入的列值我觉得这应该很简单,但是在过去几天尝试了各种方法、搜索以前的讨论并引用脚本索引之后,我却一无所获。
我想循环访问数据表中的值并将它们用作 SQL 查询的输入,其中数据表值是“批次代码”,SQL 查询引用“where vcLotCode like...”。我稍后会处理循环,我正在努力让第一个值发挥作用。我尝试过“选择”、“设置”、“获取”等的各种迭代......任何帮助表示赞赏。
// Data table
dt=New Table ("Lots",
Add Rows(5),
New Column ("vcLotCode",
Character,
Nominal,
Set Values ({"lcode.0123","12345.4321","dcode.0123","54321.0123","lotcd.4567"})
),
);
// One attempt to set lot code to values from table
dt<<SELECT rows=""></SELECT>回复:SQL 输入的列值完美的。太感谢了!
回复:SQL 输入的列值我同意,在这种情况下,当您对查询进行交互时,将这三个步骤分解为单独的操作是有好处的。
使用这种方法,您还可以在样板 sqlstr 上使用 Substitute()。
回复:SQL 输入的列值另一条评论 - 您正在使用 LIKE 运算符,但没有使用通配符。也许你的意思是这样的?
"select vcLotCode, vcWaferCode, dAvg
from fr.database
where vcLotCode like '%^lotcode^%'");
回复:SQL 输入的列值一些东西:
o 您正在使用开放数据库。我更喜欢创建数据库连接+执行SQL +关闭数据库连接。优点执行SQL就是您创建一个到数据库的连接,并可以用它执行多个 SQL 语句。打开数据库为每个 SQL 语句创建一个新连接
o 您不需要使用所有这些评估、替代等。此外,还有一些未定义的变量,例如 datasource 和 sqlcode。
试试这个代码:
// Data table
dt = New Table( "Lots",
Add Rows( 5 ),
New Column( "vcLotCode",
Character,
Nominal,
Set Values( {"lcode.0123", "12345.4321", "dcode.0123", "54321.0123", "lotcd.4567"} )
),
);
// Pull data from database using lot code as lookup variable
DSNString = "Driver={SQL Server}; SERVER=rpt; DATABASE=FAB; UID=rrpt; ";
// Create a connection to SQL Server
dbc = create database connection(dsnstring);
// Loop over all lot numbers
for (i = 1, i <= nrows(dt), i++,
lotcode = dt:vclotcode[i];
sqlStr = evalinsert(
"select vcLotCode, vcWaferCode, dAvg
from fr.database
where vcLotCode like '^lotcode^'");
print(sqlstr);
// Create a separate table for each lot number
dt2 = execute sql(dbc, sqlstr);
);
close database connection(dbc);
回复:SQL 输入的列值有两点需要考虑。 首先,代码可以大大简化。 此更改将减少出现错误的机会并使错误更容易被发现。 其次,您正在操作 Open Database() 函数参数的字符串。 双引号是字符串的分隔符。 因此,嵌入的双引号必须使用转义序列“\!”进行标识。 (反斜杠,砰)。
测试这个脚本。 (我不能。)
dt = New Table( "Lots",
Add Rows( 5 ),
New Column( "vcLotCode", Character, Nominal, Set Values( {"lcode.0123", "12345.4321", "dcode.0123", "54321.0123", "lotcd.4567"} ) )
);
For( r = 1, r <= N Row( dt ), r++,
Eval(
Parse(
Substitute(
"dt2 = Open Database(
\!"Driver={SQL Server}; SERVER=rpt; DATABASE=FAB; UID=rrpt; \!",
\!"select vcLotCode, vcWaferCode, dAvg from fr.database where vcLotCode like '\!"LLLLL\!"'\!",
\!"Data\!"
)",
"LLLLL", dt:vcLotCode[r]
)
)
)
);