如何从sp返回查询?

时间:2012-11-21 12:44:18

标签: asp.net sql stored-procedures

我遇到过必须从sp和。返回查询的情况 将其分配给session.This示例查询。原始的一个是大的,在许多表上有内连接。表名是动态的.sp.One中的2个查询应该执行而其他查询可以发送到C#页。如何访问该查询在C#。我不想要它的结果。只是查询。我在这里只显示了一个我想要返回的查询。

示例:

create Procedure Sample
(
@id int
)
as
begin
declare @pid varchar(10)
declare @query varchar(500)

set @pid = cast(@id as varchar(10))

set @query ='select * from Table1 where id = '+@pid+'' 
--Execute sp_executesql @query
--print @query
select @query
end

3 个答案:

答案 0 :(得分:1)

设置@Query后使用SELECT。这将返回到c页面。 请确保不要使用ExecuteNonQuery()方法

SET @query ='select * from Table1 where id = '+@pid+'' 
SELECT @query AS myQuery

以c sharp为例,

DataSet ds;
YourDataAdapter.Fill(ds);
string query = ds.Tables[0].Rows[0]["myQuery"].ToString();

答案 1 :(得分:0)

通过使用ExecuteScalar,你可以得到这个

SqlConnection con = new SqlConnection("Your Connection String");
con.Open();
SqlCommand com = new SqlCommand("Sample", con);
com.CommandType = System.Data.CommandType.StoredProcedure;
object query = com.ExecuteScalar();
con.Close();

答案 2 :(得分:0)

首先,您需要将OUTPUT参数添加到存储过程中,如下所示:

    @ID int , 
    @SQLQuery varchar OUTPUT

存储过程代码中的后一步,您可以将其值设置为:

    SET @SQLQuery = 'select * from users'

然后在C#中添加此类代码,以从存储过程中获取此OUTPUT参数的值:

     System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("Sample", cn);
        cmd.CommandType = CommandType.StoredProcedure;
        System.Data.SqlClient.SqlParameter parm = new System.Data.SqlClient.SqlParameter("@ID", SqlDbType.Int);
        parm.Value = 1;
        parm.Direction = ParameterDirection.Input;
        cmd.Parameters.Add(parm);
        System.Data.SqlClient.SqlParameter parm2 = new System.Data.SqlClient.SqlParameter("@SQLQuery", SqlDbType.VarChar);
        parm2.Size = 50;
        parm2.Direction = ParameterDirection.Output; // This is important!
        cmd.Parameters.Add(parm2);
        cn.Open();
        cmd.ExecuteNonQuery();
        cn.Close();

        // Print the output value
        Console.WriteLine(cmd.Parameters["@SQLQuery"].Value);
        Console.ReadLine();

我希望这会回答你的问题。如果是,则将其标记为“已回答”。