【问题标题】:Visual Studio: Creating a multi-value parameter using multiple stored procsVisual Studio:使用多个存储过程创建多值参数
【发布时间】:2016-08-12 17:44:41
【问题描述】:

我正在使用 Visual Studio 构建包含多个存储过程的报告。我的问题是用户需要能够从多值参数中选择他们需要运行的存储过程。存储的过程适用于需要相同类型数据的不同部门。

即。
-sp_MissingImagesFinance

-sp_MissingImagesHR

-sp_MissingImagesAdmin

我需要为用户创建一个下拉参数,以便能够根据他们的部门选择上述 sp 之一,然后他们将使用他们的特定 sp 运行报告。有没有办法做到这一点?我没有修改任何 sp 的权限,所以我必须使用我所拥有的。

【问题讨论】:

  • 员工只能访问其中一项或任意组合?
  • 员工在任何时候都只能访问其中一个。
  • 然后我会使用一个查找表,根据他们的部门存储他们可以访问的表。即 EmpID 和 SP 名称或 INT 列然后检查逻辑并根据用户是谁自动调用正确的过程。让他们选择运行哪一个是没有意义的,因为他们应该只能运行一个,对吧?
  • 好吧,让我换个说法。他们将有权访问所有这些,但他们一次只能查看一个。没有任何实例会选择管理员和财务显示在同一个实例上。
  • 这在细节上相当稀疏。但我想我会创建一个新程序来接收您要运行的程序的名称。然后根据参数决定运行哪一个。我意识到您可能无法更改现有程序,但您应该不鼓励使用 sp_ (或任何前缀)。 sqlperformance.com/2012/10/t-sql-queries/sp_prefix

标签: sql-server stored-procedures parameters visual-studio-2015


【解决方案1】:

我建议创建一个与此类似的驱动程序存储过程。您只需要以这种方式传递选定的选项。另一种选择类似于 Jonathan Wilcock 在他的回答中发布的内容。

create procedure MissingImagesReport
    (@ReportName varchar(50)) 
as
    set nocount on;

    if @ReportName = 'Finance'
        exec sp_MissingImagesFinance

    if @ReportName = 'HR'
        exec sp_MissingImagesHR

    if @ReportName = 'Admin'
        exec sp_MissingImagesAdmin

正如我在 cmets 中提到的,我会敦促您的团队停止使用 sp_ 甚至更好,完全停止使用前缀。

【讨论】:

    【解决方案2】:

    假设您使用 ComboBox,那么您所需要的只是以下内容:

    using (SqlConnection conn = new SqlConnection("MyConnectionString"))
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand(ComboBox1.Text, conn);
        cmd.CommandType = CommandType.StoredProcedure;
        SqlDataReader rdr = cmd.ExecuteReader(); // or whatever you need
        conn.Close();
    }
    

    【讨论】:

    • 对不起,我还是 sql 新手,所以我没有按照您提供的示例进行操作。
    • 对不起,我不太清楚。您说您在 Visual Studio 中工作,所以我宁愿假设您正在编写一个带有表单的小型 c# windows 应用程序,以允许用户运行报告。上面的代码 sn -p 是如何从 c# 调用 SQL 服务器的说明。如果您可以更具体地了解您正在做什么(以及如何),这将有所帮助。
    猜你喜欢
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 2019-08-14
    • 2018-03-16
    • 1970-01-01
    相关资源
    最近更新 更多