MS SQL Serverに対するクエリを数年間実行するためにtclodbcパッケージを使用してきました。今はx64プロセスに切り替える必要があり、x64バージョンがないためtclodbcはロードされません。Tclを使用してTclを使用してWin x64上でMS SQLを使用する
代替案を調べ始めてtdbcを試しましたが、パラメータとして渡される文字フィールドに問題があります。私は2つの整数列と2つのvarchar列(50と100の長さ)を持つテストテーブルを作成しました。
私はレコードを挿入しようとしていますが、次のようになります。 1. 2つの整数パラメータのみを提供するレコードを挿入すると、5つのレコードが挿入されます(下のコードを参照)。 2. 1文字のみのパラメータを指定してレコードを挿入すると、レコードが挿入され、「SQL Server用のMicrosoft [ODBCドライバ11]文字列データ、右切り捨て」というエラーメッセージが表示され、スクリプトが失敗します。 3. 2つの文字パラメータ、または整数パラメータと文字パラメータは何も挿入されません - 私は上記と同じエラーが発生します。
他のデータ型はテストしませんでしたが、文字パラメータに問題があるようです(nvarcharとchar型の列も試しました)。 - すべて同じ結果と
package require tdbc::odbc
set con "Driver=\{ODBC Driver 11 for SQL Server\};server=server;database=database;Intergrated Security=True;Trusted_Connection=Yes"
tdbc::odbc::connection create db $con
set insert_cmd [db prepare {INSERT INTO dbo.testing_tdbc (f50,f100) VALUES(:f50,:f100) } ]
$insert_cmd paramtype f50 char 50
$insert_cmd paramtype f100 char 100
foreach fint [list 1 2 3 4 5] {
set fi1 $fint
set fi2 [expr {$fi1*2}]
set f50 "${fi2}_${fi1}"
set f100 $f50
$insert_cmd execute
}
$insert_cmd close
db close
は、私はSQL ServerのODBCドライバ13と同じ試してみました:
は、ここに私のコードです。
私はヤクブによって提案されたコードを試してみましたが、それはうまくいきませんでした:
(ステートメントを実行)[Microsoft]の[ODBC SQL Serverドライバー]文字列データ、右切り捨て 実行中に、「:: OO :: Obj22を: :Stmt :: 1 resultSetCreate :: oo :: Obj23 :: ResultSet :: 1 :: Obj22 :: Stm t :: 1 {f50 2_1 f100 2_1} " ("アップレベル "ボディライン1) が呼び出されましたfrom: "uplevel 1 [list [self] resultSetCreate [namespace current] :: ResultSet :: [incr resultSetSeq] [self] {*} $ args]" (クラス ":: tdbc ::ステートメント"メソッド "execute" "行2) は、 から呼び出されます。" $ insert_cmd execute $ bindings "... –