日期:2014-05-18  浏览次数:20471 次

|M| 从零开始学习存储过程第二贴:帮我理解以下一条存储过程
下面是
http://community.csdn.net/Expert/topic/5552/5552690.xml?temp=.154339
高歌写的存储过程:未测试过
-------------------------
create   procedure   test(@name   varchar,@TypeId   int)
as
declare   @sql   varchar(512)
declare   @iWhere   varchar(32)
set   @sql= "select   *   from   tab "
set   @iWhere= "   where   1=1 "
        if(name   <>   " ")
        begin
              set   @iWhere   =@iWhere   +   "   And   Name   like   '% "   +   Name   +   "% ' ";
        end
        if(TypeID   <>   -1)
        begin
                set   @iWhere   =@iWhere   +   "And   TypeID   = "   +   TypeID;
        end
EXECUTE   sp_executesql   @sql
---------------------------------------
理解:
create   procedure   test(@name   varchar,@TypeId   int)
创建一个test存储过程   传两个参数   name   typeid
declare   @sql   varchar(512)
declare   @iWhere   varchar(32)
声明两个变量
set   @sql= "select   *   from   tab "
set   @iWhere= "   where   1=1 "
设置变量sql的值
if(name   <>   " ")
begin
      set   @iWhere   =@iWhere   +   "   And   Name   like   '% "   +   Name   +   "% ' ";
end
if(TypeID   <>   -1)
begin
        set   @iWhere   =@iWhere   +   "And   TypeID   = "   +   TypeID;
end
根据条件给   iWhere赋值
EXECUTE   sp_executesql   @sql
执行sql语句
------------------------------------
以下是我不理解的
1:这里的declare是不是相当于VB的dim
2:set   @sql= "select   *   from   tab "   在sql中赋值是不是前面要加多一个set   还是有别的用意
3:begin   end   是不是相当于C#的{   }
4:这里是不是少了一句set   @sql=@sql   +   @iWhere;

谢谢



------解决方案--------------------
Mark。 declare是起什么作用的?
------解决方案--------------------
1:这里的declare是不是相当于VB的dim 正确 2:set @sql= "select * from tab " 在sql中赋值是不是前面要加多一个set 还是有别的用意 ===== 赋值的方式有两种,一种是set 另一种是select 不能用像程序中 变量 = 值这种方法 3:begin end 是不是相当于C#的{ } 差不多. 应该是 if后面的{} 4.对
------解决方案--------------------
1 √
2 纯属赋值
3 √
4 哪里?
------解决方案--------------------

------解决方案--------------------
1:这里的declare是不是相当于VB的dim
2:set @sql= "select * from tab " 在sql中赋值是不是前面要加多一个set 还是有别的用意
3:begin end 是不是相当于C#的{ }
4:这里是不是少了一句set @sql=@sql + @iWhere;

以上你的理解都正确。set 就是给变量重新赋值