DBI:bind_param将字符串转换为ntext -> nvarchar(max)和ntext不兼容。

5

我有一个关于Perl DBI中bind_param的问题。以下SQL语句是有效的:

my $sth = $dbh->prepare("SELECT id FROM table WHERE id = 'string'");
$sth->execute();

虽然以下内容不包括:
my $sth = $dbh->prepare("SELECT id FROM table WHERE id = ?");
$sth->execute('string');

最后一个查询引起的错误是:
[ODBC SQL Server Driver][SQL Server]The data types nvarchar(max) and ntext are incompatible in the equal to operator. (SQL-42000)

看起来bind_paramexecute调用时将 'string' 转换为 ntext。我该如何解决这个问题?


1
假设您正在使用DBD::ODBC(看起来是这样),那么SQLBindParameter将以SQL_C_CHAR的C类型和SQLDescribeParam中驱动程序指定的参数类型进行调用。如果您拥有最新的DBI和DBD::ODBC,您可以设置DBI_TRACE=DBD=x.log并运行您的代码,您将在x.log中看到它获取和执行的内容。 - bohica
1个回答

7

考虑在 SQL 调用之前绑定值类型:

use DBI qw(:sql_types);

my $sth = $dbh->prepare( "SELECT id FROM table WHERE id = ?" );

my $key = 'string';
my $sth->bind_param( 1, $key, SQL_VARCHAR );

$sth->execute();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接