zoukankan      html  css  js  c++  java
  • 佩特来项目经验小集合(2)___组合查询存储过程,报错 "varchar JBID='' 转换成数据类型 int 时失败"

       今天写一个组合查询的存储过程遇到这样一个问题:在将 varchar 值 'SELECT * FROM View_DLS_WXJD_Customer WHERE 1=1 and JBID ='' 转换成数据类型 int 时失败。错误详情如图所看到的:
     
       经百度:字符串变量和整型变量连接不能用+连接。

    于是我採用cast()函数将DLSJB这个整型变量转换成字符串,这样问题就攻克了。

    正确代码例如以下所看到的:

    ALTER PROCEDURE [dbo].[Proc_SH_WXJDList]
    	@DH varchar(50),       --单号
    	@DLSJB int,    --代理商级别ID
    	@DLSName varchar(100)   --代理商姓名
    AS
    BEGIN
    Declare @sqlStr varchar(800)  --存储sql语句
    	
    	Set @sqlStr = 'SELECT * FROM View_DLS_WXJD_Customer WHERE 1=1'	--合成sql语句,不输入条件则选择所有
    	
    	 if(@DH!='')									--推断是写单号
    		set @sqlStr = @sqlStr + ' and DH like ''%' + @DH + '%''' 
    	if(@DLSJB!= -1 )	                    --推断是否选择代理商级别
    		set @sqlStr = @sqlStr + ' and JBID ='+''''+cast(@DLSJB as varchar(5))+''''
    	if(@DLSName!='')										--推断是否选择代理商名
    		set @sqlStr = @sqlStr + ' and DLSName like ''%' + @DLSName + '%''' 	
    	EXEC (@sqlStr + 'ORDER BY DH DESC')			
    END

       cast()是一个转换函数,跟我们在asp.net中使用的Convert函数一样。都是一种数据类型转换到还有一种数据类型。这篇文章恰恰是使用cast()函数使整型变量强制转换成字符串型,这样字符串型之间就能够使用+进行连接了。

     
     

     
  • 相关阅读:
    最长回文子串 leetcode
    leetcode Plus one
    n的阶乘末尾有几个0?
    求两数的最大公约数和最小公倍数
    汉诺塔
    求n的阶乘
    svn book
    求斐波那契数列第n项
    判断一个数是否是素数
    <C Traps and Pitfalls>笔记
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5215173.html
Copyright © 2011-2022 走看看