2012-10-26 73 views
4

我有一個關於perl的DBI的bind_param問題。下面的SQL工作:DBI:bind_param蒙上字符串NTEXT - >爲nvarchar(max)和NTEXT是不相容的

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被稱爲與C型SQL_C_CHAR和的參數類型什麼驅動程序說參數在SQLDescribeParam中。如果你有一個最新的DBI和DBD :: ODBC,你可以設置DBI_TRACE = DBD = x.log並運行你的代碼,你會看到它在x.log中得到了什麼。 – bohica

回答

5

考慮綁定的值類型之前的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(); 
相關問題