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.

 All Forums
 SQL Server 2005 Forums
 Transact-SQL (2005)
 variables in stored proc help please!

Author  Topic 

besadmin
Posting Yak Master

116 Posts

Posted - 2011-05-25 : 15:04:30
hey friends

i have an sp where if mode = 1 do an insert
so its

insert into table
(
col 1
, col 2
, col 3
)

DECLARE @ var1 varchar(50)
DECLARE @ var2 int

SELECT.... blah blah


so, i am getting an error that just says error near declare.
Can you tell from what i provided what my problem might be?

If anyone could please provide some insight i would really appreciate it.

Thanks a ton for any help in advance friends. always appreciated!!

Thank you!

tkizer
Almighty SQL Goddess

38200 Posts

Posted - 2011-05-25 : 15:11:38
You haven't provided enough information for us to help. We would need to see the actual code, not the whole thing, just a few lines before and after where the problem is.

Tara Kizer
Microsoft MVP for Windows Server System - SQL Server
http://weblogs.sqlteam.com/tarad/

Subscribe to my blog
Go to Top of Page

besadmin
Posting Yak Master

116 Posts

Posted - 2011-05-25 : 15:27:33
ahh my bad. Here is the full Mode in the SP, which is where my issue is.

The error is occuring below the comment where it says NEW SECTION SHOULD GO HERE FOR THE INSERT.

Thanks a ton!


ALTER PROCEDURE [dbo].[StoredProc_InsertToTable]
-- Add the parameters for the stored procedure here
@Mode int
, @Search varchar(30)
, @fcOrderID char(9) = ''
, @Carrier varchar(24) = ''
, @PROTrackingNo char(30) = ''
, @LoadNo varchar(24) = ''
, @CarrierInvNo varchar(24) = ''
, @dateInvoice datetime = ''
, @InvAmnt float = ''
AS

/*
EXEC StoredProc_InsertToTable 1, ''




*/



/***************************************************************************************

Mode 1 - Search by Fascor Order ID

***************************************************************************************/



IF @Mode = 1 --Search by Fascor Order ID
BEGIN
IF EXISTS
(SELECT *
FROM Table2
WHERE LoadNo =
(SELECT DISTINCT LoadNo FROM Table2
WHERE fcOrderID = @Search))
SELECT
[uid]
,[fcOrderID]
,[p21OrderNo]
,[Carrier]
,[dateShipped]
,[PROTrackingNo]
,[LoadNo]
,[CarrierInvNo]
,[dateInvoice]
,[InvAmnt]
,[InvTTL]
,[Delete]
FROM
(
SELECT
[uid]
,[fcOrderID]
,[p21OrderNo]
,[Carrier]
,[dateShipped]
,[PROTrackingNo]
,[LoadNo]
,[CarrierInvNo]
,[dateInvoice]
,[InvAmnt]
,[InvTTL]
,[Delete]
,CASE
WHEN [fcOrderID] = @Search
THEN 1
ELSE 0
END AS [OrdVal]
FROM dbo.Table2
WHERE LoadNo COLLATE Latin1_General_CI_AS = (SELECT c.Load_Nbr FROM Table1..delivery_arc c WHERE bol_id = @Search)
) T
ORDER BY [OrdVal] DESC, fcOrderId

ELSE
INSERT INTO Table2
(
fcOrderID
, p21OrderNo
, Carrier
, dateShipped
, PROTrackingNo
, LoadNo
)


/*************** NEW SECTION SHOULD GO HERE FOR THE INSERT! *************************************************/

DECLARE @OrderID varchar(25)
DECLARE @DelivNo varchar(25)

DECLARE @NumberOnInvoice varchar(25)

SELECT
@OrderID = Order_ID
, @DelivNo = Delivery_Nbr
FROM Table1.[dbo].[DeliveryOrders_Arc]
WHERE Order_ID = @NumberOnInvoice

IF @OrderID IS NULL
BEGIN
print 'This Came From The IF Section'

/************************************************
Get the Delivery, Load, and Pro Numbers and put
them into variables to use in later SELCET
************************************************/

DECLARE @DeliveryNo varchar(25)
DECLARE @LoadNo1 varchar(25)
DECLARE @ProNbr varchar(25)

SELECT
@LoadNo1 = A.Load_Nbr
, @ProNbr = A.Pro_Nbr
, @DeliveryNo = A.Delivery_Nbr
FROM Table1..delivery_arc A
WHERE A.BOL_ID = @NumberOnInvoice --'0055404872'




/************************************************
Get the TRU or CORRECT OrderID By Using The
Delivery No Obtained in previous query and Store
it in @TrueOrderID Variable
************************************************/

DECLARE @TrueOrderID varchar(25)
SET @TrueOrderID =
(
SELECT
B.Order_ID
FROM Table1.[dbo].[DeliveryOrders_Arc] B
WHERE B.Delivery_Nbr = @DeliveryNo
)



/************************************************
Compile everything together in this one SELECT
by using the Tru/Correct OrderNo, along with the
LoadNo and ProNo Variables From Frist SELECT
************************************************/

SELECT DISTINCT
A.shipment_number AS FCOrderID
, X.source_order_no AS p21OrderNo
, A.carrier_name AS Carrier
, X.date_last_Modified AS ShipDate
, @LoadNo1 AS LoadNo
, DA.Pro_Nbr --@ProNbr2 AS Pro_Nbr
FROM Table3.bryanequipmentdotcom.dbo.BES_PackageTrackingDetails A
JOIN Table3.Commerce_Center.dbo.p21_view_pick_list_hdr X
ON A.shipment_number = X.pick_list_no
JOIN Table1.dbo.DeliveryOrders_Arc DOA
ON A.shipment_number = DOA.Order_ID COLLATE Latin1_General_CI_AS
JOIN Table1.dbo.Delivery_Arc DA
ON DOA.Delivery_Nbr = DA.Delivery_Nbr COLLATE Latin1_General_CI_AS
WHERE A.Shipment_number IN
(SELECT
A.Order_ID COLLATE Latin1_General_CI_AS
FROM Table1.[dbo].[DeliveryOrders_Arc] A
JOIN Table1.[dbo].[Delivery_Arc] B
ON A.Delivery_Nbr = B.Delivery_Nbr
WHERE B.Load_Nbr = @LoadNo1
AND BOL_Date > '2011-01-01'
)

END



/*
ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!,
ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!,
ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!, ELSE!!
*/


ELSE
BEGIN
print 'This Came From The ELSE Section'

/************************************************
Get the Delivery, Load, and Pro Numbers and put
them into variables to use in later SELCET
************************************************/
DECLARE @DeliveryNo2 varchar(25)
DECLARE @LoadNo2 varchar(25)
DECLARE @ProNbr2 varchar(25)

SELECT
@LoadNo2 = A.Load_Nbr
, @ProNbr2 = A.Pro_Nbr
, @DeliveryNo2 = A.Delivery_Nbr
FROM Table1..delivery_arc A
WHERE Delivery_Nbr =
(
SELECT
A.Delivery_Nbr
FROM Table1.[dbo].[DeliveryOrders_Arc] A
WHERE order_id = @NumberOnInvoice
)



/************************************************
Get the TRU or CORRECT OrderID By Using The
Delivery No Obtained in previous query and Store
it in @TrueOrderID Variable
************************************************/

DECLARE @TrueOrderID2 varchar(25)
SET @TrueOrderID2 =
(
SELECT
B.Order_ID
FROM Table1.[dbo].[DeliveryOrders_Arc] B
WHERE B.Delivery_Nbr = @DeliveryNo2
)



/************************************************
Compile everything together in this one SELECT
by using the Tru/Correct OrderNo, along with the
LoadNo and ProNo Variables From Frist SELECT
************************************************/

SELECT DISTINCT
A.shipment_number AS FCOrderID
, X.source_order_no AS p21OrderNo
, A.carrier_name AS Carrier
, X.date_last_Modified AS ShipDate
, @LoadNo2 AS LoadNo
, DA.Pro_Nbr
FROM Table3.bryanequipmentdotcom.dbo.BES_PackageTrackingDetails A
JOIN Table3.Commerce_Center.dbo.p21_view_pick_list_hdr X
ON A.shipment_number = X.pick_list_no
JOIN Table1.dbo.DeliveryOrders_Arc DOA
ON A.shipment_number = DOA.Order_ID COLLATE Latin1_General_CI_AS
JOIN Table1.dbo.Delivery_Arc DA
ON DOA.Delivery_Nbr = DA.Delivery_Nbr COLLATE Latin1_General_CI_AS
WHERE A.Shipment_number IN
(SELECT
A.Order_ID COLLATE Latin1_General_CI_AS
FROM Table1.[dbo].[DeliveryOrders_Arc] A
JOIN Table1.[dbo].[Delivery_Arc] B
ON A.Delivery_Nbr = B.Delivery_Nbr
WHERE B.Load_Nbr = @LoadNo2
AND BOL_Date > '2011-01-01'
)
END
END
Go to Top of Page

tkizer
Almighty SQL Goddess

38200 Posts

Posted - 2011-05-25 : 16:13:32
Well you have an INSERT without a corresponding VALUES/SELECT:

ELSE
INSERT INTO Table2
(
fcOrderID
, p21OrderNo
, Carrier
, dateShipped
, PROTrackingNo
, LoadNo
)




Tara Kizer
Microsoft MVP for Windows Server System - SQL Server
http://weblogs.sqlteam.com/tarad/

Subscribe to my blog
Go to Top of Page

besadmin
Posting Yak Master

116 Posts

Posted - 2011-05-25 : 16:18:44
well below that is where i declare some new variables and have the select i am trying to use for the values. that is where i think the problem is. again, when i run it as shown it says "Incorrect syntax near the keyword 'DECLARE'."

Thanks a ton!
Go to Top of Page

tkizer
Almighty SQL Goddess

38200 Posts

Posted - 2011-05-25 : 16:25:55
You can't declare variables in the middle of it. If you aren't yet ready to run the insert, then move that further down.

Tara Kizer
Microsoft MVP for Windows Server System - SQL Server
http://weblogs.sqlteam.com/tarad/

Subscribe to my blog
Go to Top of Page

besadmin
Posting Yak Master

116 Posts

Posted - 2011-05-25 : 16:34:21
well i am ready for the insert at that point, but i was wondering about the variables in the middle. I will try moving them out of there.

Thanks a lot for your replys!!
Go to Top of Page

tkizer
Almighty SQL Goddess

38200 Posts

Posted - 2011-05-25 : 16:39:19
I don't think you are ready for the insert at that point. It seems to me, it needs to move right before the SELECT DISTINCT part. No other statements above it have the right number of columns for your insert.

Tara Kizer
Microsoft MVP for Windows Server System - SQL Server
http://weblogs.sqlteam.com/tarad/

Subscribe to my blog
Go to Top of Page

tkizer
Almighty SQL Goddess

38200 Posts

Posted - 2011-05-25 : 16:41:18
And it seems like you're going to need to wrap the initial ELSE into BEGIN/END.

Tara Kizer
Microsoft MVP for Windows Server System - SQL Server
http://weblogs.sqlteam.com/tarad/

Subscribe to my blog
Go to Top of Page

besadmin
Posting Yak Master

116 Posts

Posted - 2011-05-26 : 14:51:09
thanks for the replys friends.

SO i moved the declares out of the middle of the SP, and have a new error message...

An INSERT statement cannot contain a SELECT statement that assigns values to a variable.

REALLY!? so what the heck do i do now friends? it took me forever to create that select that have me the values we want. Any help is soo much appreciated as always!

Thanks again!
Go to Top of Page

tkizer
Almighty SQL Goddess

38200 Posts

Posted - 2011-05-26 : 15:58:59
Like I said, you'll need to move the INSERT to where you are doing the SELECT for it. Show us just the insert/select portion as I can't really tell what you are trying to do.

Tara Kizer
Microsoft MVP for Windows Server System - SQL Server
http://weblogs.sqlteam.com/tarad/

Subscribe to my blog
Go to Top of Page

besadmin
Posting Yak Master

116 Posts

Posted - 2011-05-26 : 16:15:43
ohh, now i got ya. thanks!

It compiled now, but nothing inserted... hm. Ill get back to you. Thank you so much for the replys and your help!!

I really appreciate it!
Go to Top of Page

tkizer
Almighty SQL Goddess

38200 Posts

Posted - 2011-05-26 : 16:50:31
You're welcome, glad to help.

Tara Kizer
Microsoft MVP for Windows Server System - SQL Server
http://weblogs.sqlteam.com/tarad/

Subscribe to my blog
Go to Top of Page

besadmin
Posting Yak Master

116 Posts

Posted - 2011-05-26 : 16:56:29
I am Not getting down to the correct part now. If you look at the code i posted above... see the IF EXISTS toward the top. that returns nothing, but i think my query is stopping there and giving me nothing in return.

Do you know how i can get down below that, or what i am doing wrong?

thanks a ton!
Go to Top of Page

tkizer
Almighty SQL Goddess

38200 Posts

Posted - 2011-05-26 : 16:57:53
I believe that you'll need to wrap the ELSE portion with BEGIN/END.

Tara Kizer
Microsoft MVP for Windows Server System - SQL Server
http://weblogs.sqlteam.com/tarad/

Subscribe to my blog
Go to Top of Page
   

- Advertisement -