标签: stored-procedures

使用c#中的参数调用存储过程

我可以在我的程序中执行删除,插入和更新,并尝试通过从我的数据库中调用创建的存储过程来执行插入操作.

这个按钮插件我工作得很好.

private void btnAdd_Click(object sender, EventArgs e)
{
        SqlConnection con = new SqlConnection(dc.Con);
        SqlCommand cmd = new SqlCommand("Command String", con);

        da.InsertCommand = new SqlCommand("INSERT INTO tblContacts VALUES (@FirstName, @LastName)", con);
        da.InsertCommand.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = txtFirstName.Text;
        da.InsertCommand.Parameters.Add("@LastName", SqlDbType.VarChar).Value = txtLastName.Text;

        con.Open();
        da.InsertCommand.ExecuteNonQuery();
        con.Close();

        dt.Clear();
        da.Fill(dt);
    } 
Run Code Online (Sandbox Code Playgroud)

这是调用名为sp_Add_contact添加联系人的过程的按钮的开始.这两个参数sp_Add_contact(@FirstName,@LastName).我在谷歌搜索了一些很好的例子,但我没有发现任何有趣的东西.

private void button1_Click(object sender, EventArgs e)
{
        SqlConnection con = new SqlConnection(dc.Con);
        SqlCommand cmd = new SqlCommand("Command String", con);
        cmd.CommandType = CommandType.StoredProcedure;

        ???

        con.Open();
        da. ???.ExecuteNonQuery();
        con.Close();

        dt.Clear();
        da.Fill(dt);
    }
Run Code Online (Sandbox Code Playgroud)

c# sql-server asp.net ado.net stored-procedures

132
推荐指数
3
解决办法
57万
查看次数

如何检测存储过程是否已存在

我必须编写一个部署脚本,如果存储过程存在或不存在,该脚本将起作用.即如果它存在,那么我需要改变它,否则创建它.

我怎么能在sql中这样做.

我正在使用SQL Server 2005

sql stored-procedures sql-server-2005

127
推荐指数
6
解决办法
18万
查看次数

SQL存储过程中的动态排序

这是我过去花了几个小时研究的问题.在我看来,这应该是现代RDBMS解决方案应该解决的问题,但到目前为止,我还没有发现任何真正解决我认为在具有数据库后端的任何Web或Windows应用程序中非常普遍的需求.

我说的是动态排序.在我的幻想世界中,它应该像以下一样简单:

ORDER BY @sortCol1, @sortCol2
Run Code Online (Sandbox Code Playgroud)

这是遍布Internet 的新手SQL和存储过程开发人员给出的典型示例."为什么这不可能?" 他们问.总是有人最终会向他们讲述存储过程的编译性质,一般的执行计划,以及为什么不能将参数直接放入ORDER BY子句的各种其他原因.


我知道你们中有些人已经在想:"让客户进行排序." 当然,这会从数据库中卸载工作.然而,在我们的案例中,我们的数据库服务器甚至没有在99%的时间里出汗,它们甚至还没有多核,或者每6个月发生一次对系统架构的任何其他改进.仅仅因为这个原因,让我们的数据库处理排序不会有问题.另外,数据库非常好擅长排序.它们已针对它进行了优化,并且已经有多年时间才能做到正确,这样做的语言非常灵活,直观且简单,而且最重要的是,任何初学SQL编写者都知道如何去做,更重要的是他们知道如何编辑它,进行更改,进行维护等等.当您的数据库远非被征税而您只想简化(并缩短!)开发时间时,这似乎是一个明显的选择.

然后是网络问题.我已经使用了JavaScript来对HTML表进行客户端排序,但是它们不可避免地对我的需求不够灵活,而且,因为我的数据库没有过度征税而且可以非常容易地进行排序,我很难证明重写或滚动我自己的JavaScript分拣机所需的时间.服务器端排序通常也是如此,尽管它已经比JavaScript更受欢迎了.我不是特别喜欢DataSet的开销的人,所以起诉我.

但这又说明了这是不可能的 - 或者更确切地说,不容易.在先前的系统中,我已经完成了一种令人难以置信的黑客方式来获得动态排序.它不漂亮,不直观,简单或灵活,初学者SQL编写器会在几秒钟内丢失.这已经不仅仅是一个"解决方案",而是一个"复杂化".


以下示例并不意味着公开任何类型的最佳实践或良好的编码风格或任何内容,也不表示我作为T-SQL程序员的能力.他们就是这样,我完全承认他们是混乱,糟糕的形式,只是简单的黑客.

我们将一个整数值作为参数传递给存储过程(让我们调用参数只是"排序"),然后从中确定一堆其他变量.例如......让我们说sort是1(或默认值):

DECLARE @sortCol1 AS varchar(20)
DECLARE @sortCol2 AS varchar(20)
DECLARE @dir1 AS varchar(20)
DECLARE @dir2 AS varchar(20)
DECLARE @col1 AS varchar(20)
DECLARE @col2 AS varchar(20)

SET @col1 = 'storagedatetime';
SET @col2 = 'vehicleid';

IF @sort = 1                -- Default sort.
BEGIN
    SET @sortCol1 = @col1;
    SET @dir1 = 'asc';
    SET @sortCol2 = @col2; …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sorting stored-procedures

126
推荐指数
6
解决办法
6万
查看次数

如何检查数据库中是否存在视图?

如果数据库中存在某个View,我需要执行一些SQL代码.我如何检查View是否存在?

编辑:正在使用的DBMS是Microsoft SQL Server

sql database sql-server stored-procedures view

122
推荐指数
6
解决办法
16万
查看次数

您对存储过程的命名约定是什么?

我已经看到了命名存储过程的各种规则.

有些人使用usp_作为sproc名称的前缀,其他人使用应用程序名称的缩写作为前缀,还有其他人使用所有者名称.您不应该在SQL Server中使用sp_,除非您真正的意思.

有些人用动词(Get,Add,Save,Remove)启动proc名称.其他人则强调实体名称.

在具有数百个sprocs的数据库中,当您认为已存在时,可能很难滚动并找到合适的sproc.命名约定可以使定位sproc更容易.

你使用命名约定吗?请描述一下,并解释为什么你喜欢它而不是其他选择.

答复摘要:

  • 每个人似乎都提倡命名的一致性,对于每个人来说,使用与使用特定命名约定相同的命名约定可能更为重要.
  • 前缀:虽然很多人使用usp_或类似的东西(但很少sp_),但许多其他人使用数据库或应用程序名称.一个聪明的DBA使用gen,rpt和tsk来区分一般的CRUD sprocs和用于报告或任务的那些.
  • 动词+名词似乎比Noun + Verb稍微受欢迎.有些人对动词使用SQL关键字(选择,插入,更新,删除),而其他人则使用非SQL动词(或缩写),如Get和Add.有些人区分单数和复数名词,以表明是否正在检索一个或多个记录.
  • 在适当的情况下,最后建议使用另一个短语.GetCustomerById,GetCustomerBySaleDate.
  • 有些人在名称段之间使用下划线,有些人则避免使用下划线.app_ Get_Customer与appGetCustomer - 我想这是一个可读性的问题.
  • 可以将大量的sprocs分隔为Oracle包或Management Studio(SQL Server)解决方案和项目,或SQL Server模式.
  • 应该避免使用不可思议的缩写.

为什么我选择我做的答案:有很多好的回答.谢谢你们!如你所见,选择一个是非常困难的.我选择的那个与我产生共鸣.我遵循他描述的相同路径 - 尝试使用Verb + Noun然后无法找到适用于Customer的所有sprocs.

能够定位现有的sproc,或确定是否存在,甚至是非常重要的.如果有人无意中创建了具有其他名称的重复sproc,则可能会出现严重问题.

由于我通常使用包含数百个sprocs的非常大的应用程序,因此我倾向于使用最容易找到的命名方法.对于较小的应用程序,我可能会提倡Verb + Noun,因为它遵循方法名称的一般编码约定.

他还提倡使用app name作为前缀,而不是使用不太有用的usp_.有几个人指出,有时数据库包含多个应用程序的sprocs.因此,使用app name前缀有助于隔离sprocs并帮助DBA和其他人确定sproc用于哪个应用程序.

sql stored-procedures naming-conventions

120
推荐指数
7
解决办法
7万
查看次数

在语句完成之前,最大递归100已用尽

我不断得到max recursion error这个查询.

起初我以为是因为返回null然后它会尝试匹配导致错误的空值,但是我重写了我的查询,因此不返回空值并且仍然会发生错误.

什么是重写此函数的最佳方法,以便不会发生错误

WITH EmployeeTree AS
(
    SELECT 
        EMP_SRC_ID_NR Id, USR_ACV_DIR_ID_TE Uuid, 
        CASE Employees.APV_MGR_EMP_ID 
           WHEN Null THEN '0' 
           ELSE Employees.APV_MGR_EMP_ID 
        END as  ApprovalManagerId 
    FROM 
        dbo.[tEmployees] as Employees WITH (NOLOCK)
    WHERE 
        APV_MGR_EMP_ID = @Id 
        and Employees.APV_MGR_EMP_ID is not null 
        and Employees.EMP_SRC_ID_NR is not null  

    UNION ALL

    SELECT 
        EMP_SRC_ID_NR Id, USR_ACV_DIR_ID_TE Uuid, 
        CASE Employees.UPS_ACP_EMP_NR 
           WHEN Null THEN '1' 
           ELSE Employees.UPS_ACP_EMP_NR 
        END as ApprovalManagerId 
    FROM 
        dbo.[tEmployees] as Employees WITH (NOLOCK)
    WHERE 
        UPS_ACP_EMP_NR = @Id 
        and Employees.APV_MGR_EMP_ID is not null …
Run Code Online (Sandbox Code Playgroud)

sql stored-procedures common-table-expression

120
推荐指数
2
解决办法
16万
查看次数

Mysql - 如何退出/退出存储过程

我有一个非常简单的问题,但我没有得到任何简单的代码使用Mysql退出SP.任何人都可以与我分享如何做到这一点?

CREATE PROCEDURE SP_Reporting(IN tablename VARCHAR(20))
BEGIN
     IF tablename IS NULL THEN
          #Exit this stored procedure here
     END IF;

     #proceed the code
END;
Run Code Online (Sandbox Code Playgroud)

mysql sql stored-procedures

119
推荐指数
3
解决办法
9万
查看次数

存储过程和视图之间有什么区别?

我对以下几点感到困惑:

  1. 存储过程和视图之间有什么区别?

  2. 我应该何时使用存储过程,何时应该在SQL Server中使用视图?

  3. 视图是否允许创建我们可以传递参数的动态查询?

  4. 哪一个最快,哪个基于哪一个比另一个快?

  5. 视图或存储过程是否永久分配内存?

  6. 如果有人说视图创建虚拟表,而程序创建材料表,这意味着什么?

如果有的话,请告诉我更多的要点.

sql stored-procedures sql-server-2005 views

118
推荐指数
8
解决办法
15万
查看次数

你如何调试MySQL存储过程?

我当前调试存储过程的过程非常简单.我创建了一个名为"debug"的表,我在运行时从存储过程中插入变量值.这允许我在脚本中的给定点看到任何变量的值,但有没有更好的方法来调试MySQL存储过程?

mysql database debugging stored-procedures

116
推荐指数
11
解决办法
16万
查看次数

SQL Server存储过程中的可选参数?

我正在SQL Server 2008中编写一些存储过程,并想知道可选输入参数的概念是否可行?

我想我总是可以为我不想使用的参数传递NULL,检查存储过程中的值,然后从那里拿东西,但我感兴趣的是这里有这个概念.谢谢!

stored-procedures optional-parameters sql-server-2008

112
推荐指数
3
解决办法
20万
查看次数