Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
DavidChel
Constraint Violating Yak Guru
474 Posts |
Posted - 2008-08-28 : 15:13:41
|
I've been looking at this for 2 hours. I really despise the crappy errors that Query Analyzer throws. Anyway, this works syntactically: DECLARE @DateFrom AS DATETIMESET @DateFrom = '01/01/2002'SELECT B4.*, AF.NewFNBOAMT, AF.SHIPPEDNOTINVOICEDFROM --Original ( SELECT sorels.identity_column, sorels.fsono, dbo.sorels.fenumber, dbo.soitem.fshipitem, dbo.sorels.frelease, dbo.sorels.forderqty, dbo.sorels.finvqty, DBO.SORELS.FUNETPRICE, ( SORELS.FSHIPBOOK + SORELS.FSHIPBUY + SORELS.FSHIPMAKE ) AS SHIPPED, ( CASE WHEN SOITEM.FSHIPITEM = 1 THEN ( ( SORELS.FORDERQTY - ( SORELS.FSHIPBOOK + SORELS.FSHIPBUY + SORELS.FSHIPMAKE ) ) * SORELS.FUNETPRICE ) ELSE 0 END ) AS oldFNBOAMT FROM SORELS JOIN SOMAST ON SOMAST.FSONO = SORELS.FSONO JOIN SOITEM ON SOITEM.FSONO = SORELS.FSONO AND SOITEM.FINUMBER = SORELS.FINUMBER WHERE SOMAST.FSTATUS = 'OPEN' AND FMASTERREL = 0 AND somast.forderdate >= CONVERT(DATETIME, @DateFrom) ) B4 INNER JOIN -- New Method ( SELECT sorels.identity_column, sorels.fsono, dbo.sorels.fenumber, dbo.sorels.frelease, COALESCE(dbo.GETSHIPPEDNOTINVOICEDQTY(sorels.fsono + sorels.finumber + sorels.frelease), 0) AS SHIPPEDNOTINVOICED, ( SORELS.forderqty - SORELS.finvqty - COALESCE(dbo.GETSHIPPEDNOTINVOICEDQTY(sorels.fsono + sorels.finumber + sorels.frelease), 0)) * SORELS.funetprice AS NewFNBOAMT FROM SORELS JOIN SOMAST ON SOMAST.FSONO = SORELS.FSONO JOIN SOITEM ON SOITEM.FSONO = SORELS.FSONO AND SOITEM.FINUMBER = SORELS.FINUMBER WHERE SOMAST.FSTATUS = 'OPEN' AND FMASTERREL = 0 AND somast.forderdate >= CONVERT(DATETIME, @DateFrom) ) Af ON b4.IDENTITY_column = Af.identity_columnWHERE Af.newFNBOAMT <> B4.oldFNBOAMT When I tried to edit the part bolded to the following I get these errors. DECLARE @DateFrom AS DATETIMESET @DateFrom = '01/01/2002'SELECT B4.*, AF.NewFNBOAMT, AF.SHIPPEDNOTINVOICEDFROM --Original ( SELECT DBO.sorels.identity_column, DBO.sorels.fsono, dbo.sorels.fenumber, dbo.soitem.fshipitem, dbo.sorels.frelease, dbo.sorels.forderqty, dbo.sorels.finvqty, DBO.SORELS.FUNETPRICE, ( SORELS.FSHIPBOOK + SORELS.FSHIPBUY + SORELS.FSHIPMAKE ) AS SHIPPED, ( CASE WHEN SOITEM.FSHIPITEM = 1 THEN ( ( SORELS.FORDERQTY - ( SORELS.FSHIPBOOK + SORELS.FSHIPBUY + SORELS.FSHIPMAKE ) ) * SORELS.FUNETPRICE ) ELSE 0 END ) AS oldFNBOAMT FROM SORELS JOIN SOMAST ON SOMAST.FSONO = SORELS.FSONO JOIN SOITEM ON SOITEM.FSONO = SORELS.FSONO AND SOITEM.FINUMBER = SORELS.FINUMBER WHERE SOMAST.FSTATUS = 'OPEN' AND FMASTERREL = 0 AND somast.forderdate >= CONVERT(DATETIME, @DateFrom) ) B4 INNER JOIN -- New Method ( SELECT sorels.identity_column, sorels.fsono, dbo.sorels.fenumber, dbo.sorels.frelease, COALESCE(dbo.GETSHIPPEDNOTINVOICEDQTY(sorels.fsono + sorels.finumber + sorels.frelease), 0) AS SHIPPEDNOTINVOICED, SORELS.forderqty - SORELS.finvqty - ( CASE WHEN ( DBO.SORELS.fshipbook + DBO.SORELS.fshipbuy + dbo.sorelsfshipmake ) - dbo.sorels.finvqty > COALESCE(dbo.GETSHIPPEDNOTINVOICEDQTY(sorels.fsono + sorels.finumber + sorels.frelease), 0) THEN COALESCE(dbo.GETSHIPPEDNOTINVOICEDQTY(sorels.fsono + sorels.finumber + sorels.frelease),0) ELSE ( SORELS.fshipbook + SORELS.fshipbuy + dbo.sorelsfshipmake ) - dbo.sorels.finvqty END ) * SORELS.funetprice AS NewFNBOAMT FROM SORELS JOIN SOMAST ON SOMAST.FSONO = SORELS.FSONO JOIN SOITEM ON SOITEM.FSONO = SORELS.FSONO AND SOITEM.FINUMBER = SORELS.FINUMBER WHERE SOMAST.FSTATUS = 'OPEN' AND FMASTERREL = 0 AND somast.forderdate >= CONVERT(DATETIME, @DateFrom)) Af ON b4.IDENTITY_column = Af.identity_columnWHERE Af.newFNBOAMT <> B4.oldFNBOAMT Server: Msg 107, Level 16, State 2, Line 4The column prefix 'dbo' does not match with a table name or alias name used in the query.Server: Msg 107, Level 16, State 1, Line 4The column prefix 'dbo' does not match with a table name or alias name used in the query. Anybody?  |
|
|
sodeep
Master Smack Fu Yak Hacker
7174 Posts |
Posted - 2008-08-28 : 15:18:23
|
You need to remove dbo as sorels is already owner.quote: Originally posted by DavidChel I've been looking at this for 2 hours. I really despise the crappy errors that Query Analyzer throws. Anyway, this works syntactically: DECLARE @DateFrom AS DATETIMESET @DateFrom = '01/01/2002'SELECT B4.*, AF.NewFNBOAMT, AF.SHIPPEDNOTINVOICEDFROM --Original ( SELECT sorels.identity_column, sorels.fsono, dbo.sorels.fenumber, dbo.soitem.fshipitem, dbo.sorels.frelease, dbo.sorels.forderqty, dbo.sorels.finvqty, DBO.SORELS.FUNETPRICE, ( SORELS.FSHIPBOOK + SORELS.FSHIPBUY + SORELS.FSHIPMAKE ) AS SHIPPED, ( CASE WHEN SOITEM.FSHIPITEM = 1 THEN ( ( SORELS.FORDERQTY - ( SORELS.FSHIPBOOK + SORELS.FSHIPBUY + SORELS.FSHIPMAKE ) ) * SORELS.FUNETPRICE ) ELSE 0 END ) AS oldFNBOAMT FROM SORELS JOIN SOMAST ON SOMAST.FSONO = SORELS.FSONO JOIN SOITEM ON SOITEM.FSONO = SORELS.FSONO AND SOITEM.FINUMBER = SORELS.FINUMBER WHERE SOMAST.FSTATUS = 'OPEN' AND FMASTERREL = 0 AND somast.forderdate >= CONVERT(DATETIME, @DateFrom) ) B4 INNER JOIN -- New Method ( SELECT sorels.identity_column, sorels.fsono, dbo.sorels.fenumber, dbo.sorels.frelease, COALESCE(dbo.GETSHIPPEDNOTINVOICEDQTY(sorels.fsono + sorels.finumber + sorels.frelease), 0) AS SHIPPEDNOTINVOICED, ( SORELS.forderqty - SORELS.finvqty - COALESCE(dbo.GETSHIPPEDNOTINVOICEDQTY(sorels.fsono + sorels.finumber + sorels.frelease), 0)) * SORELS.funetprice AS NewFNBOAMT FROM SORELS JOIN SOMAST ON SOMAST.FSONO = SORELS.FSONO JOIN SOITEM ON SOITEM.FSONO = SORELS.FSONO AND SOITEM.FINUMBER = SORELS.FINUMBER WHERE SOMAST.FSTATUS = 'OPEN' AND FMASTERREL = 0 AND somast.forderdate >= CONVERT(DATETIME, @DateFrom) ) Af ON b4.IDENTITY_column = Af.identity_columnWHERE Af.newFNBOAMT <> B4.oldFNBOAMT When I tried to edit the part bolded to the following I get these errors. DECLARE @DateFrom AS DATETIMESET @DateFrom = '01/01/2002'SELECT B4.*, AF.NewFNBOAMT, AF.SHIPPEDNOTINVOICEDFROM --Original ( SELECT DBO.sorels.identity_column, DBO.sorels.fsono, dbo.sorels.fenumber, dbo.soitem.fshipitem, dbo.sorels.frelease, dbo.sorels.forderqty, dbo.sorels.finvqty, DBO.SORELS.FUNETPRICE, ( SORELS.FSHIPBOOK + SORELS.FSHIPBUY + SORELS.FSHIPMAKE ) AS SHIPPED, ( CASE WHEN SOITEM.FSHIPITEM = 1 THEN ( ( SORELS.FORDERQTY - ( SORELS.FSHIPBOOK + SORELS.FSHIPBUY + SORELS.FSHIPMAKE ) ) * SORELS.FUNETPRICE ) ELSE 0 END ) AS oldFNBOAMT FROM SORELS JOIN SOMAST ON SOMAST.FSONO = SORELS.FSONO JOIN SOITEM ON SOITEM.FSONO = SORELS.FSONO AND SOITEM.FINUMBER = SORELS.FINUMBER WHERE SOMAST.FSTATUS = 'OPEN' AND FMASTERREL = 0 AND somast.forderdate >= CONVERT(DATETIME, @DateFrom) ) B4 INNER JOIN -- New Method ( SELECT sorels.identity_column, sorels.fsono, dbo.sorels.fenumber, dbo.sorels.frelease, COALESCE(dbo.GETSHIPPEDNOTINVOICEDQTY(sorels.fsono + sorels.finumber + sorels.frelease), 0) AS SHIPPEDNOTINVOICED, SORELS.forderqty - SORELS.finvqty - ( CASE WHEN ( DBO.SORELS.fshipbook + DBO.SORELS.fshipbuy + dbo.sorelsfshipmake ) - dbo.sorels.finvqty > COALESCE(dbo.GETSHIPPEDNOTINVOICEDQTY(sorels.fsono + sorels.finumber + sorels.frelease), 0) THEN COALESCE(dbo.GETSHIPPEDNOTINVOICEDQTY(sorels.fsono + sorels.finumber + sorels.frelease),0) ELSE ( SORELS.fshipbook + SORELS.fshipbuy + dbo.sorelsfshipmake ) - dbo.sorels.finvqty END ) * SORELS.funetprice AS NewFNBOAMT FROM SORELS JOIN SOMAST ON SOMAST.FSONO = SORELS.FSONO JOIN SOITEM ON SOITEM.FSONO = SORELS.FSONO AND SOITEM.FINUMBER = SORELS.FINUMBER WHERE SOMAST.FSTATUS = 'OPEN' AND FMASTERREL = 0 AND somast.forderdate >= CONVERT(DATETIME, @DateFrom)) Af ON b4.IDENTITY_column = Af.identity_columnWHERE Af.newFNBOAMT <> B4.oldFNBOAMT Server: Msg 107, Level 16, State 2, Line 4The column prefix 'dbo' does not match with a table name or alias name used in the query.Server: Msg 107, Level 16, State 1, Line 4The column prefix 'dbo' does not match with a table name or alias name used in the query. Anybody? 
|
 |
|
|
DavidChel
Constraint Violating Yak Guru
474 Posts |
Posted - 2008-08-28 : 15:31:48
|
| Thank you Sodeep. I think I need to learn something here. Forgive my ignorance, but why does the dbo. matter? |
 |
|
|
DavidChel
Constraint Violating Yak Guru
474 Posts |
Posted - 2008-08-28 : 15:35:20
|
Secondly, when I change the code to this: DECLARE @DateFrom AS DATETIMESET @DateFrom = '01/01/2002'SELECT B4.*, AF.NewFNBOAMT, AF.SHIPPEDNOTINVOICEDFROM --Original ( SELECT sorels.identity_column, sorels.fsono, sorels.fenumber, soitem.fshipitem, sorels.frelease, sorels.forderqty, sorels.finvqty, SORELS.FUNETPRICE, ( SORELS.FSHIPBOOK + SORELS.FSHIPBUY + SORELS.FSHIPMAKE ) AS SHIPPED, ( CASE WHEN SOITEM.FSHIPITEM = 1 THEN ( ( SORELS.FORDERQTY - ( SORELS.FSHIPBOOK + SORELS.FSHIPBUY + SORELS.FSHIPMAKE ) ) * SORELS.FUNETPRICE ) ELSE 0 END ) AS oldFNBOAMT FROM SORELS JOIN SOMAST ON SOMAST.FSONO = SORELS.FSONO JOIN SOITEM ON SOITEM.FSONO = SORELS.FSONO AND SOITEM.FINUMBER = SORELS.FINUMBER WHERE SOMAST.FSTATUS = 'OPEN' AND FMASTERREL = 0 AND somast.forderdate >= CONVERT(DATETIME, @DateFrom) ) B4 INNER JOIN -- New Method ( SELECT sorels.identity_column, sorels.fsono, sorels.fenumber, sorels.frelease, COALESCE(GETSHIPPEDNOTINVOICEDQTY(sorels.fsono + sorels.finumber + sorels.frelease), 0) AS SHIPPEDNOTINVOICED, (SORELS.forderqty - SORELS.finvqty - ( CASE WHEN ( SORELS.fshipbook + SORELS.fshipbuy + sorelsfshipmake ) - sorels.finvqty > COALESCE(GETSHIPPEDNOTINVOICEDQTY(sorels.fsono + sorels.finumber + sorels.frelease), 0) THEN COALESCE(GETSHIPPEDNOTINVOICEDQTY(sorels.fsono + sorels.finumber + sorels.frelease),0) ELSE ( SORELS.fshipbook + SORELS.fshipbuy + sorelsfshipmake ) - sorels.finvqty END ) * SORELS.funetprice) AS NewFNBOAMT FROM SORELS JOIN SOMAST ON SOMAST.FSONO = SORELS.FSONO JOIN SOITEM ON SOITEM.FSONO = SORELS.FSONO AND SOITEM.FINUMBER = SORELS.FINUMBER WHERE SOMAST.FSTATUS = 'OPEN' AND FMASTERREL = 0 AND somast.forderdate >= CONVERT(DATETIME, @DateFrom)) Af ON b4.IDENTITY_column = Af.identity_columnWHERE Af.newFNBOAMT <> B4.oldFNBOAMT I still get the following error: Server: Msg 195, Level 15, State 10, Line 39'GETSHIPPEDNOTINVOICEDQTY' is not a recognized function name. I assume I’m getting that error because I don’t have dbo.getshippednotinvoicedqty. I replace that and get: DECLARE @DateFrom AS DATETIMESET @DateFrom = '01/01/2002'SELECT B4.*, AF.NewFNBOAMT, AF.SHIPPEDNOTINVOICEDFROM --Original ( SELECT sorels.identity_column, sorels.fsono, sorels.fenumber, soitem.fshipitem, sorels.frelease, sorels.forderqty, sorels.finvqty, SORELS.FUNETPRICE, ( SORELS.FSHIPBOOK + SORELS.FSHIPBUY + SORELS.FSHIPMAKE ) AS SHIPPED, ( CASE WHEN SOITEM.FSHIPITEM = 1 THEN ( ( SORELS.FORDERQTY - ( SORELS.FSHIPBOOK + SORELS.FSHIPBUY + SORELS.FSHIPMAKE ) ) * SORELS.FUNETPRICE ) ELSE 0 END ) AS oldFNBOAMT FROM SORELS JOIN SOMAST ON SOMAST.FSONO = SORELS.FSONO JOIN SOITEM ON SOITEM.FSONO = SORELS.FSONO AND SOITEM.FINUMBER = SORELS.FINUMBER WHERE SOMAST.FSTATUS = 'OPEN' AND FMASTERREL = 0 AND somast.forderdate >= CONVERT(DATETIME, @DateFrom) ) B4 INNER JOIN -- New Method ( SELECT sorels.identity_column, sorels.fsono, sorels.fenumber, sorels.frelease, COALESCE(DBO.GETSHIPPEDNOTINVOICEDQTY(sorels.fsono + sorels.finumber + sorels.frelease), 0) AS SHIPPEDNOTINVOICED, (SORELS.forderqty - SORELS.finvqty - ( CASE WHEN ( SORELS.fshipbook + SORELS.fshipbuy + sorelsfshipmake ) - sorels.finvqty > COALESCE(DBO.GETSHIPPEDNOTINVOICEDQTY(sorels.fsono + sorels.finumber + sorels.frelease), 0) THEN COALESCE(DBO.GETSHIPPEDNOTINVOICEDQTY(sorels.fsono + sorels.finumber + sorels.frelease),0) ELSE ( SORELS.fshipbook + SORELS.fshipbuy + sorelsfshipmake ) - sorels.finvqty END ) * SORELS.funetprice) AS NewFNBOAMT FROM SORELS JOIN SOMAST ON SOMAST.FSONO = SORELS.FSONO JOIN SOITEM ON SOITEM.FSONO = SORELS.FSONO AND SOITEM.FINUMBER = SORELS.FINUMBER WHERE SOMAST.FSTATUS = 'OPEN' AND FMASTERREL = 0 AND somast.forderdate >= CONVERT(DATETIME, @DateFrom)) Af ON b4.IDENTITY_column = Af.identity_columnWHERE Af.newFNBOAMT <> B4.oldFNBOAMT This works syntactically. However, what am I missing about the importance of being the database owner? |
 |
|
|
tkizer
Almighty SQL Goddess
38200 Posts |
Posted - 2008-08-28 : 15:41:33
|
| dbo isn't necessarily the database owner. Typically, developers just use dbo as the object owners, so dbo.ObjectName works great. But some people setup users to own the objects, so you need to use UserName.ObjectName. So the three-part naming convention is: DatabaseName.ObjectOwner.ObjectName where ObjectOwner is typically dbo. You can leave off DatabaseName in almost all cases.Tara KizerMicrosoft MVP for Windows Server System - SQL Serverhttp://weblogs.sqlteam.com/tarad/Subscribe to my blog |
 |
|
|
tkizer
Almighty SQL Goddess
38200 Posts |
|
|
Lamprey
Master Smack Fu Yak Hacker
4614 Posts |
Posted - 2008-08-28 : 17:26:12
|
| Just to follow up on what Tara said, because GETSHIPPEDNOTINVOICEDQTY is a function SQL required that you prefix it with the owner. You can use the ObjectOwner.ObjectName when joining to the tables, but when you are specifying the column list you do not specify the Owner. Presumably because each object name needs to be unique for a particular query, whether the actual name is unique or by using an alias. |
 |
|
|
|
|
|
|
|