Subject: | DBD::ODBC - [Microsoft][SQL Server Native Client 10.0][SQL Server]The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. |
Bug:
DBD::ODBC::db do failed: [Microsoft][SQL Server Native Client 10.0][SQL
Server]The incoming tabular data stream (TDS) remote procedure call
(RPC) protocol stream is incorrect. Parameter 7 (""): Data type 0xE7 has
an invalid data length or metadata length. (SQL-42000) [for Statement
"INSERT INTO longdescs (bug_id,who,bug_when,thetext,isprivate)
VALUES (?,?,?,?,?)"] at Bugzilla/DB/Mssql.pm line 626
Bugzilla::DB::Mssql::do(undef, 'INSERT INTO longdescs
(bug_id,who,bug_when,thetext,isprivate)...', undef, 9, 1, '2009-07-28
17:45:59.353',
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...', 0)
called at Bugzilla/Bug.pm line 540
Bugzilla::Bug::create('Bugzilla::Bug', 'HASH(0x408a098)') called at
D:\WebRoot\Bugzilla\post_bug.cgi line 175
It appears that when inserting to a NVARCHAR(MAX) field in a MSSQL 2008
database, that the precision is being incorrectly calculated.
NVARCHAR(MAX) behaves more inline with a text field in relation to how
much data it will hold, I believe that no precision needs to be sent.
Using Management Studio for mssql 2008 I have tested inserting up to
500k characters in to a nvarchar(max) field with no issues.
http://msdn.microsoft.com/en-us/library/ms186939.aspx
nvarchar [ ( n | max ) ]
Variable-length Unicode character data. n can be a value from 1
through 4,000. max indicates that the maximum storage size is 2^31-1
bytes. The storage size, in bytes, is two times the number of characters
entered + 2 bytes. The data entered can be 0 characters in length.
Environment:
Windows 2008 SP2 64 Bit
MSSQL 2008 Ent 64Bit
IIS7
ActiveState Perl version: 5.10
DBD::ODBC version: 2.22