zoukankan      html  css  js  c++  java
  • 我用到的存储过程

    一个mvc的项目,领导要求用存储过程,不在代码里出现任何sql语句,除了存储过程名称,无奈,硬着头皮上吧。

    写了一个超简单的,可是愣是没有输出值,怎么查询是空,代码如下:

    ALTER PROCEDURE [dbo].[proc_BasicMain_ProvinceByName]
    @pname nvarchar
    AS
    BEGIN
    select id ,provinceName from dbo.BasicMain_Province where provinceName=@pname
    END

    各种郁闷,,,然后,群里问网友,大神给出主意:参数类型可能和provinceName字段的类型不匹配,遂改,结果ok了。各种感谢啊,激动,然后在群里说:是类型的问题,改成一致的类型就o了,,,(我还以为我发现真理了,其实不然)改完之后,代码如下:

    ALTER PROCEDURE [dbo].[proc_BasicMain_ProvinceByName] 
    @pname nchar(10)
    AS
    BEGIN
    select id ,provinceName from dbo.BasicMain_Province where provinceName=@pname
    END

    没过多大会儿,大牛出来指正我的错误观念,那个nvarchar字段,如果不指定长度,默认长度为1,把传进来的参数截断了,肯定查不出来数据了,除非为它指定长度,原来如此。。。我这个水平啊,真心不敢恭维。

    总结下:

    参数类型最好和数据库字段保持一致,避免出错,如果不能保持一致,也最好为类型设置长度。

    继续补充中,,,

    一:

    如下写存储过程,可以返回受影响的行数

    CREATE PROCEDURE proc_BasicMain_SchoolTypeDelete
    @id int
    AS
    declare @ReturnId int
    BEGIN
    delete from dbo.BasicMain_SchoolType where id=@id
    END
    select @ReturnId=@@Rowcount
    select @ReturnId
    GO

    个人理解是:先声明一个输出对象:declare @ReturnId int,然后再存储过程代码结束处为该临时输出对象赋值:select @ReturnId=@@Rowcount,然后输出:select @ReturnId

    二:

    使用存储过程实现模糊查询: like格式必须如此: '%' + @tName + '%'

    CREATE PROCEDURE proc_BasicMain_SchoolTypeLikeName
    @tName nvarchar(50)
    AS
    BEGIN
    select id,typeName,addTime from dbo.BasicMain_SchoolType where typeName like '%' + @tName + '%'
    END
    GO

     

    三:

    直接插入一条数据,并返回该数据的ID:

    ALTER PROCEDURE [dbo].[proc_BasicMain_SchoolTypeAdd]
    @tName nvarchar(50),
    @aTime Datetime
    AS
    BEGIN
    insert into dbo.BasicMain_SchoolType(typeName,addTime) values(@tName,@aTime) select @@IDENTITY
    END

    四:

    多条件查询的sql存储过程:需要注意的地方:rtrim(@sId) 因为@sId是个int类型,在sql中不能和字符串直接拼接,所以需要做转换,即:rtrim(@sId) 后再相加即可。

    [貌似,这个rtrim()函数在转换@sId的过程中,同时把它转换成字符串类型了,所以,就对了。(不知道我这么理解对不,,)]

    (真得感谢群里的网友,那么帮助我,感激涕零啊。。。不是他们,我现在还在迷茫呢)

    CREATE PROCEDURE  proc_BasicMain_UserInfoByParam 
    @lName nvarchar(50),
    @tName nvarchar(50),
    @sId int
    AS
    BEGIN
    declare @sql nvarchar(500)
    set @sql='select dbo.BasicMain_UserInfo.id,userName,RealName,pwd,dbo.BasicMain_School.schoolName From dbo.BasicMain_School INNER JOIN
    dbo.BasicMain_UserInfo ON dbo.BasicMain_School.id = dbo.BasicMain_UserInfo.schoolID where 1=1 '
    if @lName!=''
    set @sql=@sql+' and userName like ''%' +@lName+ '%'''
    if @tName!=''
    set @sql=@sql+' and RealName like ''%'+@tName+ '%'''
    if @sId<>0
    set @sql=@sql+' and schoolID='+rtrim(@sId)
    exec (@sql)
    END

  • 相关阅读:
    网络知识
    DXP 技巧和龙芯3A装机
    312-金胜维 P系列2.5寸 480G SATA3 SSD固态硬盘
    NVIDIA Jetson TK1 开发板
    NVIDIA Jetson™ TX1
    XILINX FPGA 开发板 XC3S250E 核心板 学习板+12模块
    AES-OZ745 OZ745 Zynq-7000 开发板与套件
    北京太速科技——海外代购
    AR/VR增强现实 虚拟现实,嵌入式解决方案探讨
    270-VC709E 增强版 基于FMC接口的Xilinx Vertex-7 FPGA V7 XC7VX690T PCIeX8 接口卡
  • 原文地址:https://www.cnblogs.com/ZQiuMei/p/3168838.html
Copyright © 2011-2022 走看看