zoukankan      html  css  js  c++  java
  • 关于SQL Server 存储过程的一点问题

    1. 如何使用SQL Server 生成一条存储过程?

       打开SQL Server管理平台,展开节点“对象资源管理器”→“数据库服务器”→“可编程性”→“存储过程”,在窗口的右侧显示出当前数据库的所有存储过程。单击鼠标右键,在弹出的快捷菜单中选择“新建存储过程”命令。

      

    Note: 现在你可以从打开的窗口编辑自己的存储过程,但是除非你的存储过程可以执行通过,否则不会被SQL Server添加为一条合法的存储过程。

    2. 存储过程该怎么写?  

    CREATE PROC[EDURE] procedure_name [; number ] //修改procedure_name 为你自己的存储过程名;

    [{@parameter data_type }[VARYING] [=default] [OUTPUT]] [, ...n ] 

    //@parameter 是输入参数名,或输出参数名,可以想象成一个函数的参数。

    // data_type 是类型,关于SQL 类型的更多内容请参考MSDN

    // OUTPUT 表明此参数是输入参数还是输出参数。

    // 例: @accountName nchar(10)=null, @balance float output

    [WITH{ RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION } ]

    [ FOR REPLICATION ]

    AS sql_statement [,...n ]

    //这里要写你的sql 语句,包括Declare 内部变量,并SET 内部变量的初始值等等。

    3. 如何确认我们的存储过程是逻辑上可行的而非仅仅编译可行?

        语法:[[EXEC[UTE]]

               {[@return_status=] procedure_name [;number]|@procedure_name_var}

                 // @return_status是存储过程的返回值,procedure_name 是存储过程名字

               [[@parameter=]{value|@variable [OUTPUT]|[DEFAULT]][ ,...n ]

                //@parameter 为存储过程输入参数, output 表示是输出参数

                 [WITH RECOMPILE ]

        例: Declare @balance float

             exec GetBalance 'checking', @balance output

             select @balance

    4. 我们写的存储过程会出什么问题?

        最常见的问题是逻辑不正确,比如自己感觉sql 都正确,但就是不能得到正确结果。这里有一个不具代表性的例子,也许可以正好解决你的问题:

        CREATE PROCEDURE GetBalance

        @accountName nchar(10), @balance float OUTPUT

        AS

        SET @balance=(

               SELECT amount

               FROM AccountInfo

               WHERE accountName=@accountName)

    执行时@balance一直不能返回Null, 后来发现是由于未对@accountName 进行声明导致的。

    5. 如何使用C# 语言调用存储过程?

            public static double GetBalance(string accountName)
            {
                SqlConnection conn;
                string cs = ConfigurationManager.ConnectionStrings["sampleDB"].ConnectionString;
                conn = new SqlConnection(cs);
                conn.Open();
                SqlParameter[] paras = new SqlParameter[2];
                paras[0] = new SqlParameter("@accountName", accountName);
                paras[1] = new SqlParameter("@balance", System.Data.SqlDbType.Float);
                paras[1].Direction = System.Data.ParameterDirection.Output;
    
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.CommandText = "GetBalance";
    
                for (int i = 0; i < paras.Length; i++)
                {
                    cmd.Parameters.Add(paras[i]);
                }
    
                int n = cmd.ExecuteNonQuery();
                object o = cmd.Parameters["@balance"].Value;
                return Convert.ToDouble(o);
            }
    


    作者:DanielWise
    出处:http://www.cnblogs.com/danielWise/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    第一章 Java Collections Framework总览
    MySQL常用sql语句
    static关键字
    Mysql常用索引及优化
    JDK安装及环境变量配置
    破解IntelliJ IDEA 2017
    Spring自我总结
    Java中根据字节截取字符串
    外键的主要作用:保持数据的一致性、完整性
    使用SSI框架写的简单Demo(查询模块)
  • 原文地址:https://www.cnblogs.com/danielWise/p/1900548.html
Copyright © 2011-2022 走看看