This might be a bit off topic, but... [snip] > > ... WHERE (product_code = ? OR (? IS NULL AND > product_code IS NULL)) > > and bind the same value to both placeholders. > > I understand the reasoning for this, and why it's the only way for > database servers that don't understand "= null". > > However this syntax does NOT work with DBD::Sybase because of the way > OpenClient handles the prepare. The issue is the "? is null" part: > neither the Sybase client libs, nor the server can determine what > datatype the placeholder is supposed to be, and I see no way to add a > directive to tell the server that this item is of the same type as > "product_code".
Does any database understand ? is null or ? = 3 or ? = 'foo', given that ? must be a column/function or some other name important for the query parsing (i.e. not a "value" per se)? > > Sybase, on the other hand, understands "= null". > That's handy. > I'll document this in the DBD::Sybase docs, but I just wanted to flag > the fact that the method documented in the DBI docs is unfortunately > not portable to Sybase (and *probably* not to ODBC when using a > Sybase). I don't know if ODBC w/MS-SQL handles this correctly or not. Which part, the = null or the ? is null? With SQL Server 2000 and DBD::ODBC, col_a = null returns no rows col_a is null returns 1 row ? is null (passing col_a) returns 0 rows (I suspect dbish is hiding some errors, too) Jeff > > Michael > -- > Michael Peppler - Data Migrations Inc. - http://www.mbay.net/~mpeppler > [EMAIL PROTECTED] - [EMAIL PROTECTED] > International Sybase User Group - http://www.isug.com >