zoukankan      html  css  js  c++  java
  • sql 存储过程的问题

    今天写了一个存储过程,是根据条件自定义查询条件的,主要如下:

    create  PROCEDURE [sp_ba_getmateria]
    (
    @code varchar(20)=null,
    @name varchar(40)=null
    )

    AS

    DECLARE @SQL NVARCHAR(max)
    DECLARE @WHERE NVARCHAR(1000)

    set @WHERE=' WHERE 1=1 '
     
    if @code is not null

     set @WHERE =@WHERE+ ' AND  [M_MATERIA].[code] = ' + @code
    if @name is not null

    set @WHERE =@WHERE+ ' AND  [M_MATERIA].[name] like '+ @name
     
    SET @SQL = '
    SELECT
    [M_MATERIA].[code]
    ,[M_MATERIA].[kind]
    ,[M_MATERIA].[name]
    FROM
    [M_MATERIA] '+@WHERE

    EXECUTE SP_EXECUTESQL @SQL 

    可是却是始终报错,如果单纯的查询不输入查询条件则不报错,还有一种情况是,输入了查询条件,但是不带特殊字符之类的也不报错

    这个问题纠结了我几乎一个下午

    后来终于调理出来了,问题就出在上面的标红的部分:SQL语句在执行的时候不会自动给你添加引号,没有引号的都当成int类型来处理

    后来我改成

    if @code is not null

     set @WHERE =@WHERE+ ' AND  [M_MATERIA].[code] = ' +''''+ @code+''''
    if @name is not null

    set @WHERE =@WHERE+ ' AND  [M_MATERIA].[name] like '+'''' + @name+''''

     注意,哎,其实挺简单也挺郁闷的一个问题

  • 相关阅读:
    zoj 3599 Game 博弈论
    hdu 2486/2580 / poj 3922 A simple stone game 博弈论
    hdu 1517 A Multiplication Game 博弈论
    hdu 4407 Sum 容斥原理
    hdu 4686 Arc of Dream
    hdu 4588 Count The Carries
    hdu 4586 Play the Dice
    C#学习(5)
    C#学习(4)
    C#学习(3)
  • 原文地址:https://www.cnblogs.com/zhuxiaohui/p/2781097.html
Copyright © 2011-2022 走看看