下面是
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;谢谢

解决方案 »

  1.   

    Mark。  declare是起什么作用的?
      

  2.   

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

  3.   

    1:这里的declare是不是相当于VB的dim
    2:set @sql="select * from tab" 在sql中赋值是不是前面要加多一个set 还是有别的用意
    3:begin end 是不是相当于C#的{ }
    4:这里是不是少了一句set @sql=@sql + @iWhere;以上你的理解都正确。set 就是给变量重新赋值