CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

如何判断存储过程传近来的参数为空字符串,

楼主gyx999()2003-11-01 22:16:13 在 MS-SQL Server / 基础类 提问

if   (@province='   ')  
  if   (@province='')  
  if   (@province=''''')  
  if   (@province   is   null)  
  都不行啊.  
  我传进的参数为'' 问题点数:50、回复次数:22Top

1 楼saucer(思归)回复于 2003-11-01 22:39:33 得分 0

what   is   the   datatype   for   @province?   what   about    
  if   len(@province)   =   0Top

2 楼gyx999()回复于 2003-11-01 22:55:51 得分 0

不行啊,真奇怪哦.Top

3 楼saucer(思归)回复于 2003-11-01 22:58:20 得分 30

show   your   sp   and   the   code   which   calls   this   spTop

4 楼saucer(思归)回复于 2003-11-01 23:01:52 得分 0

by   the   way,   make   sure   you   are   using    
   
  @province   varchar(10)  
   
  instead   of  
   
  @province   char(10)Top

5 楼gyx999()回复于 2003-11-01 23:11:48 得分 0

在php中调用,其中$jobkey为空  
  $query="exec   sinconic_select   '$jobkey','website','$province','$orderby'";  
   
   
  CREATE   PROCEDURE   sinconic_select  
  @jobkey   varchar(30),  
  @website   varchar(100),  
  @province   varchar(15),  
  @myorder   varchar(30)  
    AS  
  if   ((len(@province)   <>   0)and(len(@jobkey)<>0))  
   
  Top

6 楼saucer(思归)回复于 2003-11-01 23:20:43 得分 0

that   is   weird,   what   if   you   do  
   
  CREATE   PROCEDURE   sinconic_select  
  @jobkey   varchar(30),  
  @website   varchar(100),  
  @province   varchar(15),  
  @myorder   varchar(30)  
    AS  
  select   len(@province)   as   len1,   len(@jobkey)   as   len2  
   
  and   check   the   value   of   "len1"   and   "len2"?  
   
   
  Top

7 楼flyelf(空谷清音)回复于 2003-11-01 23:23:12 得分 5

SET   @province   =   NULLIF(LTRIM(RTRIM(@province)),'')  
  IF   (@province   IS   NULL)  
  Top

8 楼gyx999()回复于 2003-11-01 23:33:29 得分 0

还是不行,真奇怪了Top

9 楼gyx999()回复于 2003-11-01 23:35:35 得分 0

调试的时候看@province   的值是''''Top

10 楼pengdali()回复于 2003-11-01 23:36:54 得分 10

''''   不是空,是'如:  
   
  select   '''',''''''  
  Top

11 楼pengdali()回复于 2003-11-01 23:38:08 得分 0

如何判断存储过程传近来的参数为空字符串:  
   
  create   proc   过程名  
  @变量   varchar(100)  
  as  
  if   isnull(@变量,'')=''  
    select   '是空的'  
  else  
    select   '不是空的'  
  goTop

12 楼pengdali()回复于 2003-11-01 23:39:20 得分 0

或:  
   
  create   proc   过程名  
  @变量   varchar(100)  
  as  
  if   rtrim(isnull(@变量,''))=''  
    select   '是空的'  
  else  
    select   '不是空的'  
  go  
  Top

13 楼gyx999()回复于 2003-11-01 23:39:33 得分 0

但我传进去的字符串是''  
  这个应该是空字符吧Top

14 楼gyx999()回复于 2003-11-01 23:42:29 得分 0

select   len(@province)   as   len1,   len(@jobkey)   as   len2  
  发现len1的值为2  
  奇怪  
  Top

15 楼saucer(思归)回复于 2003-11-01 23:44:09 得分 0

try   to   write   it   out   the   $query   variable   to   see   what   is   in   it  
   
  <?php   echo("*****$query****");   ?>    
   
   
   
   
  Top

16 楼pengdali()回复于 2003-11-01 23:45:52 得分 0

你用:  
  rtrim  
  和  
  ltrim  
  取去掉空格呀。  
  如:  
   
  create   proc   过程名  
  @变量   varchar(100)  
  as  
  if   ltrim(rtrim(isnull(@变量,'')))=''  
    select   '是空的'  
  else  
    select   '不是空的'  
  goTop

17 楼gyx999()回复于 2003-11-01 23:48:34 得分 0

****exec   sinconic_select   '','website','','jobpostDate   desc'****Top

18 楼saucer(思归)回复于 2003-11-01 23:58:00 得分 0

change   your   sp   to  
   
  CREATE   PROCEDURE   sinconic_select  
  @jobkey   varchar(30),  
  @website   varchar(100),  
  @province   varchar(15),  
  @myorder   varchar(30)  
    AS  
  select   len(@province)   as   len1,   len(@jobkey)   as   len2  
   
   
  then   do  
   
   
  $result   =   mssql_execute($query);  
  $numProds   =   mssql_num_rows($result);    
   
  echo   "<h1>"   .   $numProds   ."</h1>";  
   
  if   ($row   =   mssql_fetch_row($result))    
  {    
        echo   "len1="   .   $row[0]   .   "<br>";    
        echo   "len2="   .   $row[1]   .   "<br>";    
  }  
   
   
  what   do   you   see?  
  Top

19 楼pengdali()回复于 2003-11-01 23:58:01 得分 0

1、你在查询分析器里执行会出错吗?  
   
  exec   sinconic_select   '','website','','jobpostDate   desc'  
   
  2、你的过程代码Top

20 楼gyx999()回复于 2003-11-02 02:01:19 得分 0

'a'   的len为3  
  ''     的len为2  
  'ab'的len为4  
  真是奇怪.  
  所以我现在判断@province是否为空变成判断它的len是否为2  
  你说怪不怪啊.我就怕以后出现问题Top

21 楼saucer(思归)回复于 2003-11-02 02:39:19 得分 0

something   is   wrong   with   the   mssql_execute   implmentation,   suggest   you   to   use   null   instead   of   '',   also,   try   to   use   mssql_bindTop

22 楼owenszc(晕晕@鸟)回复于 2003-11-02 02:39:47 得分 5

declare   @a   varchar(100),@b   varchar(100)  
  select   @a=''  
  select   @b=null  
  select   len(@b)  
  select   len(@a)  
   
  @b  
  null  
  @a  
  0  
   
  明白吗?Top

相关问题

  • 如何将VB的字符串做为ADODC中存储过程的参数,去执行SQL的存储过程
  • 在SqlServer的存储过程中,如何判断传进来的字符串参数是诸如"12:12:00"的时间格式。
  • 如何在将sql语句作为存储过程的字符串参数
  • 关于执行一个带字符串参数的存储过程的问题?
  • 存储过程字符串参数格式问题,头搞晕了,,
  • 在存储过程中如何判断01字符串中1的位置呢?
  • 在存储过程中使用字符串参数代替部分sql语句实现动态参数
  • 存储过程的字符串参数,怎么用在select语句的where ItemNum in 里面呀?
  • sqlanywhere在pb中的存储过程无法返回字符串参数(odbc连接)
  • ADO操作存储过程中的text类型参数时出现“字符串数据,右截位”错误!

关键词

  • mssql
  • null
  • province
  • jobkey
  • sinconic
  • 字符串
  • len
  • asif
  • 变量
  • varchar

得分解答快速导航

  • 帖主:gyx999
  • saucer
  • flyelf
  • pengdali
  • owenszc

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo