我们一直在使用tclodbc软件包来运行针对MS SQL Server的查询几年。现在我们必须切换到x64进程并且tclodbc没有加载,因为没有x64版本。
我们开始考虑替代方案并尝试使用tdbc但是我们遇到了作为参数传递的字符字段的问题。我创建了一个包含2个整数列和2个varchar列(50和100长)的测试表。
我正在尝试插入记录,并发生以下情况: 1.如果我插入只提供2个整数参数的记录,一切正常 - 插入5条记录(见下面的代码)。 2.如果我插入仅提供1个字符参数的记录,则会插入1个记录,然后脚本失败并显示以下错误:" [Microsoft] [SQL Server的ODBC驱动程序11]字符串数据,右截断" 3.如果我传递两个字符参数或整数参数和一个字符参数,则不会插入任何内容 - 我得到与上面相同的错误。
我没有测试任何其他数据类型,但看起来字符参数有问题(我也试过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 - 所有结果都相同。