Execute multiple stored procedures with one input parameter SSIS - sql-server

I am trying to execute multiple stored procedures using only one input parameter in SSIS using Execute SQL Task but I keep getting this error:
[Execute SQL Task] Error: Executing the query "EXEC sample_stored_proc1..." failed with the following error: "Value does not fall within the expected range.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.
Here is a sample code inside SQL TASK for calling the stored procedures:
EXEC sample_stored_proc1 ?;
EXEC sample_stored_proc2 ?;
EXEC sample_stored_proc3 ?;
NOTES
I tried the code with only 1 stored procedure and it works but adding 1 or more stored procedures is giving me the above error.
using OLE DB connection

I found one solution, I created a new Stored Procedure with an input parameter and put this in EXECUTE SQL TASK instead. this will be used to execute all the stored procedures above.
ALTER PROCEDURE [dbo].[xp_EXEC_ALL_sample_SPs] #Start_Date as DATE
AS
BEGIN
EXECUTE sample_stored_proc1 #Start_Date;
EXECUTE sample_stored_proc2 #Start_Date;
EXECUTE sample_stored_proc3 #Start_Date;
END
Please let me know if there are better solution

when you execute a stored procedure it returns a execution status, so when you ran three procedure it returned multiple result sets, you can simply ignore the result set returned by
DECLARE #result int;
DECLARE #start_date DATE = ?;
EXEC #result = sample_stored_proc1 #start_date;
EXEC #result = sample_stored_proc2 #start_date;
EXEC #result = sample_stored_proc3 #start_date;
doing so will suppress multiple result sets from the query

Related

SQL Server stored procedure not executing correctly

I have a stored procedure in SQL Server.
Based on a parameter #hasLocationChanged, part of the stored procedure should be run (or not):
IF NOT EXISTS (SELECT 1 FROM PF_Condition WHERE SegmentId = #routeId)
SET #isUpdate = 0
ELSE
SET #isUpdate = 1
IF #hasLocationChanged = 1
BEGIN
EXEC fnUpdateConditionDataByRouteId #routeId, #isUpdate
EXEC fnUpdateTrafficDataByRouteId #routeId, #isUpdate
EXEC dbo.InsertmappedConsPlanningandConsHistory #routeId, #AgencyId, #LastSurfType, #LPDepth
END
When I am passing value 1 for #hasLocationChanged from the application it is getting accepted since the third stored procedure within the second IF condition block of code is running but the first two aren't. Is there any way I can understand what is causing the problem. Since I am trying to run this stored procedure using an application it is not returning me with any kind of error.
The stored procedure which I thought wasn't running had a block of code commented out which shouldn't

System.Data.SqlClient.SqlException procedure has no parameters and arguments were supplied. How should I go about fixing this error?

I built a database application in Visual Studio. When I run, I get this error:
System.Data.SqlClient.SqlException: procedure sp_select_number_of_films has no parameters and arguments were supplied.
I know what the error means, but I am not sure how to fix it in my SQL code. I have tried a bunch of small tweaks, but I still get the same error.
Stored procedure:
CREATE PROCEDURE [dbo].[sp_select_number_of_films]
(#REC_ID_OUTPUT int OUTPUT)
AS
SELECT COUNT(*)
FROM Film.Title;
EXEC dbo.sp_select_number_of_films
GO
It should be called as:
DECLARE #sth INT;
Exec dbo.sp_select_number_of_films #sth OUTPUT;
But then inside stored procedure you need to assign output variable:
CREATE PROCEDURE [dbo].[sp_select_number_of_films]( #REC_ID_OUTPUT int OUTPUT)
AS SELECT #REC_ID_OUTPUT = COUNT(*)
FROM Film.Title;
And you should avoid naming stored procedures with "sp_" prefix.

Error when trying to execute stored procedure

When trying to run a stored procedure, I get the following error:
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '#CSVPath'.
I'm trying to execute it using the following:
EXEC dbo.ProcessData #CSVPath = 'D:\Data.csv'
My stored procedure starts like this:
ALTER PROCEDURE [dbo].[ProcessDataData]
#CSVPath varchar(MAX) --Path to CSV containing data.
AS
BEGIN
{query}
END
I don't know what I'm doing wrong when passing the parameter value.
Thank you.
Assuming Your proc name has the word data only once, I have just managed this successfully:
create PROCEDURE [dbo].[ProcessData]
#CSVPath varchar(MAX) --Path to CSV containing data. AS BEGIN
select #CSVPath END
EXEC dbo.ProcessData #CSVPath = 'D:\Data.csv'
Output:
D:\Data.csv
First confirm with stored procedure name and use the same SP name so that u will not get this kind of errors
You are executing wrong sp
use below query it will execute
EXEC dbo.ProcessDataData #CSVPath = 'D:\Data.csv'
This is work...your Procedure name is [dbo].[ProcessDataData] and you execute EXEC dbo.ProcessData....please like that execute EXEC dbo.ProcessDataData its work for mee...
ALTER PROCEDURE [dbo].[ProcessDataData]
#CSVPath varchar(MAX) --Path to CSV containing data.
AS
BEGIN
-- Query to execute data
END
EXEC dbo.ProcessDataData #CSVPath = 'D:\Data.csv'
Hope Its Work !!!
Happy Coding !!!
Try it, may be it works for you;
EXEC dbo.ProcessData 'D:\Data.csv'
It'll auto map your data to the parameter: #CSVPath. Otherwise, may be the issue was in your query. If issue still exists, share your complete StoredProcedure for better judgment and solution.

Receiving an error when executing a stored procedure that calls a linked server

I am in the process of setting up dynamic Reporting Services Shared Data Source using Linked Server. In doing so, I have created a stored procedure that requires a parameter and in testing the stored procedure (before setting everything else in SSRS) I am receiving an error. The stored Procedure code looks like this:
create procedure [dbo].[SelectFromServer3]
#ServerName sysname
as
begin
set nocount on;
declare #sql nvarchar(max)
set #sql = N'Select * from ' + quotename(#ServerName)+ '
.remotesvrnm.dbo.CUSTOMERS_DISAM_TABLE'
exec sp_executesql #sql
end
When I execute the following query to test the stored procedure:
EXEC SelectFromServer3 #ServerName = 'SQLSVRInstanceNM'
I receive the following error:
"Msg 208, Level 16, State 1, Line 1
Invalid object name 'remotesvrnm.dbo.CUSTOMERS_DISAM_TABLE'."
However, if I query the linked server directly with a query like:
EXEC ('SELECT * from remotesvrnm.dbo.CUSTOMERS_DISAM_TABLE') AT LNKDSRVRNM
The data is returned as expected. Even using an openquery statement works as expected:
Select * from openquery (LNKDSRVRNM, 'select * from remotesvrnmdbo.CUSTOMERS_DISAM_TABLE')
The guide that I am using to set this up I pulled from a Web search. I am at a loss as to how to resolve this. Any guidance would be greatly appreciated.
Thanks.
Can you use print #sql in your stored procedure to see what it evaluates to? Paste that into a new query window and see if you get the same error. If yes, please paste it here.
The code as shown works perfectly for me.
Thank you #PaulHoke for the suggestion to add to the stored procedure. I found that I had two things wrong... I found that I was missing a space in my stored procedure code. I was missing a space between the single quote and the .remotesvrnm.dbo.CUST....'.
The second issue was that when executing the stored procedure, I needed to use the name of the linked server, not the SQL Server Instance name. --The guide that I have been following, that I found on-line, was poorly written.

SSIS Return few output xml parameters

In SSIS (sql server 2008) I have a Sql task which is calling my stored procedure.
The stored procedure gets 1 input parameter and return 2 output parameters.
This is the prototype of my SP:
declare spGetPersonDetails(personid int, #orders xml output, #names xml output )
as.....
The problem is that in my sql task in iis, i declared these 3 parameters. one input and 2 outputs, and when it's running only one of the output parameters gets a value from the sp.
Any idea?
Thanks.
I tried recreating this simply with a sample stored procedure.
Stored Procedure
CREATE PROCEDURE [dbo].[TestProcedure]
-- Add the parameters for the stored procedure here
#Input INT,
#Output1 INT OUTPUT,
#Output2 INT OUTPUT
AS
BEGIN
SET #Output1 = #Input + 1
SET #Output2 = #Input + 2
END
Then on the SQL task (which I used an OLE DB source) I had the sql statement set to
EXEC dbo.TestProcedure #Input = ?, #Output1 = ? OUTPUT, #Output2 = ? OUTPUT
Lastly all that was needed is valid parameter mapping ensuring the "Direction" column was set accurately.
I got most of this information from two sites:
http://blogs.msdn.com/b/mattm/archive/2006/11/08/stored-procedures-with-output-parameters.aspx
http://www.julian-kuiters.id.au/article.php/ssis-execute-sql-task-output-parameters
I hope this helps you, if you have more information with the specific values you have set on this SQL task I will be happy to update my answer.

Resources