Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql DBI:bind_param将字符串强制转换为ntext->;nvarchar(max)和ntext不兼容_Sql_Perl_Dbi_Sqlbindparameter_Ntext - Fatal编程技术网

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

Sql DBI:bind_param将字符串强制转换为ntext->;nvarchar(max)和ntext不兼容,sql,perl,dbi,sqlbindparameter,ntext,Sql,Perl,Dbi,Sqlbindparameter,Ntext,我有一个关于perl DBI的bind_参数的问题。以下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 S

我有一个关于perl DBI的bind_参数的问题。以下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驱动程序][SQL Server]数据类型nvarchar(max)和ntext在equal-to运算符中不兼容。(SQL-42000)


它看起来像是由
execute
调用的
bind_param
,将“string”强制转换为ntext。如何解决这个问题?

考虑在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();

假设您使用的是DBD::ODBC(看起来是这样),那么将使用C类型的SQL_C_CHAR和驱动程序所说的参数类型SQLDescribeParam调用SQLBindParameter。如果您有一个最新的DBI和DBD::ODBC,您可以设置DBI_TRACE=DBD=x.log并运行代码,您将看到它在x.log中得到什么和做什么。