Skip to Content.
Sympa Menu

freetds - Re: [freetds] parsing T-SQL with flex & yacc (was: segfaultinPerl'sEmail::Store when using freetds)

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: "James K. Lowden" <jklowden AT freetds.org>
  • To: FreeTDS Development Group <freetds AT lists.ibiblio.org>
  • Subject: Re: [freetds] parsing T-SQL with flex & yacc (was: segfaultinPerl'sEmail::Store when using freetds)
  • Date: Sat, 25 Feb 2006 12:57:00 -0500

Vitaly Zverev wrote:
> Thanks James,
> alas it was not mine (and not handmade by anybody) statement.
> "select cnt from #temp1 where 1=2" was captured by profiler as reply on
> odbc call sequence: SQLPrepare(hstmt, ( unsigned char * )"select
> count(1) as cnt ,type into #temp1 from sysobjects group by type ; select
> cnt,type from #temp1 where cnt > ? ", SQL_NTS);
> SQLDescribeParam(hstmt,1, &DataType, &ParamSize, &DecimalDigits,
> &Nullable); So, the primary question is: How to get placeholder's
> datatype if correlated object has temporary nature and does not exist
> before now?

I'm not sure I understand the problem, Vitaly. You asked about "select
cnt from sysobjects", which isn't valid SQL; of course you need "select
cnt from #temp1".

I think Microsoft's driver is telling us the answer: to know the type of
the placeholder in "select cnt,type from #temp1 where cnt > ?", you need
the (approximate) type of 'cnt'. One way to find out -- maybe the easiest
way and certainly a reliable one -- is to create the table and gather its
metadata with a SET FMTONLY query. Then drop that table and proceed.

Am I missing something?

--jkl



> > -----Original Message-----
> > From: freetds-bounces AT lists.ibiblio.org
> > [mailto:freetds-bounces AT lists.ibiblio.org] On Behalf Of James
> > K. Lowden
> > Sent: Thursday, February 23, 2006 4:54 AM
...
> > > select count(1) as cnt ,type into #temp1 from sysobjects
> > group by type
> > > ;
> > >
> > > select cnt,type from #temp1 where cnt > ?
> > >
> > > How to get datatype of placeholder (#temp1.cnt)?
> > ...
> > > The native MS odbc driver give me an answer ;) :
> > > SET FMTONLY ON select cnt from sysobjects where 1=2 SET
> > FMTONLY OFF
> > > Error :[Microsoft][ODBC SQL Server Driver][SQL
> > Server]Invalid column
> > > name 'cnt'.
> >
> > 'cnt' is not a column in sysobjects. Perhaps you want:
> >
> > SET FMTONLY ON
> > select cnt from #temp1 where 1=2
> > SET FMTONLY OFF
> >
> > Is that any help?
> >
> > Regards,
> >
> > --jkl
> > _______________________________________________
> > FreeTDS mailing list
> > FreeTDS AT lists.ibiblio.org
> > http://lists.ibiblio.org/mailman/listinfo/freetds
> >
> _______________________________________________
> FreeTDS mailing list
> FreeTDS AT lists.ibiblio.org
> http://lists.ibiblio.org/mailman/listinfo/freetds




Archive powered by MHonArc 2.6.24.

Top of Page