|  | Posted by Erland Sommarskog on 07/09/05 00:23 
sjoshi (sjoshi@ingr.com) writes:> I get Invalid object name 'bstr'. when I try to run this query
 >
 > Select distinct c0.oid, c1.Value, c2.Value, c3.Value
 > From
 > (SELECT oid FROM dbo.COREAttribute
 > WHERE CLSID IN (
 > '{1449DB2B-DB97-11D6-A551-00B0D021E10A}',
 >....
 > '{C31DB61A-5221-42CF-9A73-FE76D5158647}'
 > )) AS c0 ,
 >
 > (select oid, dispid, value
 > FROM dbo.COREBSTRAttribute
 > WHERE iid = '{1449DB20-DB97-11D6-A551-00B0D021E10A}'
 > ) As bstr
 >
 >  LEFT JOIN bstr  AS c1
 >     ON (c0.oid = c1.oid)
 >      AND c1.dispid = 28
 >  LEFT JOIN bstr AS c2
 >     ON (c0.oid = c2.oid)
 >      AND c2.dispid = 112
 >   LEFT JOIN bstr AS c3
 >      ON (c0.oid = c3.oid)
 >      AND c3.dispid = 192
 
 You cannot refer a virtual table in this way in a query. What you are
 trying is a Common Table Expression, which is a new feature in SQL 2005
 (culled from ANSI SQL). There you would write:
 
 WITH bstr AS
 (select oid, dispid, value
 FROM dbo.COREBSTRAttribute
 WHERE iid = '{1449DB20-DB97-11D6-A551-00B0D021E10A}')
 Select distinct c0.oid, c1.Value, c2.Value, c3.Value
 From  (SELECT oid FROM dbo.COREAttribute
 WHERE CLSID IN ('{1449DB2B-DB97-11D6-A551-00B0D021E10A}',
 ....
 '{C31DB61A-5221-42CF-9A73-FE76D5158647}'
 )) AS c0 ,
 LEFT JOIN bstr  AS c1
 ON (c0.oid = c1.oid)
 AND c1.dispid = 28
 LEFT JOIN bstr AS c2
 ON (c0.oid = c2.oid)
 AND c2.dispid = 112
 LEFT JOIN bstr AS c3
 ON (c0.oid = c3.oid)
 AND c3.dispid = 192
 
 In SQL 2000, you will have to paste in the query in all the three
 LEFT JOIN. Or put the stuff into a temp table or table variable first,
 so that the query is evaluated only once. In fact this is necessary
 in SQL 2005, as the nice syntax only acts as a macro definition.
 
 
 --
 Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se
 
 Books Online for SQL Server SP3 at
 http://www.microsoft.com/sql/techinfo/productdoc/2000/books.asp
  Navigation: [Reply to this message] |