Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to return values from a dynamic SQL Stored Procedure to the Entity Framework?

I have a Stored Procedure which executes some dynamic SQL. I want to use this Stored Procedure in entity framework 4, but when I try to create a complex type the procedure returns no columns. Is there any way I can force it to return my values and get the entity framework to receive them? Here is a much-simplified example of what I want to do:

CREATE PROCEDURE sp_calculatesalary(@EmployeeId as int)
begin
    declare dynsql as varachar(500)
    @dynsql='Select @Salary=Salary,@UserName=Username from employee
            where EmployeeId='+cast(@EmployeeId as varchar)+ ''
    exec(@dynsql)
    select @Salary, @UserName
end

But this does not work. Please help me out. Basically, I want to use a Stored Procedure to execute dynamic SQL and return the values to the entity framework.

like image 521
Vishal Avatar asked Jul 02 '10 15:07

Vishal


2 Answers

Perhaps you could consider parameterized SQL, if you must do dynamic queries:

CREATE PROCEDURE sp_calculatesalary(@EmployeeId as int)  
as 
begin   
    declare @dynsql varchar(500)   
    declare @params nvarchar(500)
    declare @salary money
    declare @username varchar(50)
    set @dynsql='Select @sal=Salary,@usernm=Username from employee where EmployeeId=@empID'   
    set @params='@empID int, @sal money OUTPUT, @usernm varchar(50) OUTPUT'
    exec sp_executesql @dynsql, @params, @empID=@EmployeeID, @sal=@salary OUTPUT, @usernm = @username OUTPUT
    SELECT @salary, @username
end
like image 52
Anon246 Avatar answered Sep 23 '22 00:09

Anon246


try this

CREATE PROCEDURE sp_calculatesalary(@EmployeeId as int)   
AS
   DECLARE @dynsql VARCHAR(500)=' Salary,Username FROM employee WHERE EmployeeId=@empID'    
   EXEC sp_executesql @dynsql,'@empID INT',@empID=@EmployeeID
   SELECT 1 AS salary,2 AS username

Believe me. That is enough.

Or you can simply create a complex type based on your query result , and then use collection of the complex type as your query result.

like image 28
Mohsen Avatar answered Sep 20 '22 00:09

Mohsen