Closed lee-houghton closed 9 years ago
The TDS spec contains no mention of the hierarchyid
type or how it should be passed; however, as you discovered, varbinary
appears to be the correct parameter type.
I agree that SQL Server crashing is a bug in SQL Server, and there's not much we can do about that.
Yeah, I figured as much. I reported it to them, but haven't heard anything yet. I guess I'm stuck with using exec statements and only using parameters for non-hierarchyid types, at least until I can write my own binary serialiser. Thanks anyway!
On 20 February 2015 at 00:36, Bret Copeland notifications@github.com wrote:
The TDS spec contains no mention of the hierarchyid type or how it should be passed; however, as you discovered, varbinary appears to be the correct parameter type.
I agree that SQL Server crashing is a bug in SQL Server, and there's not much we can do about that.
— Reply to this email directly or view it on GitHub https://github.com/pekim/tedious/issues/235#issuecomment-75168984.
Disclaimer: It's highly likely that this is not a bug with Tedious. It is reproducible though, with both SQL Server 2012 and 2014. I've managed to produce the smallest test case I think I can find. It's definitely an SQL Server bug, but could it be that Tedious is formatting the request incorrectly?
Here's the smallest stored procedure I can replicate the problem with:
And here's the JavaScript I'm using to invoke it:
And the result:
And in case that wasn't big enough of a wall of text:
If I pass an extra parameter that it's not expecting, I get the usual "too many parameters passed" error. If I pass
null
or avarbinary(2)
instead, I get correct result returned.Changing the TDS version makes no difference.
Changing the @h parameter to a
varchar
orint
makes it work fine, which is what suggests to me that Tedious might be doing everything correctly.I don't particularly understand enough about TDS to know what Tedious does differently from the OLE DB, but this works: