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]
)
)
)
);