|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 就是给变量重新赋值