1。返回不同的值,区别错在什么地方
create proc procaddperson
(@userid vchar(40),@name varchar(40),@titile varchar(40),@password varchar(40))
as
begin
if exists(select * from tableperson where userid=@userid)
begin
rollback tran
return 10 ---人已存在
end
insert into tableperson(userid,name,title,password)
values(@userid,@name,@title,convert(varbinary(300),@password))
if @@error<>0
begin
rollback tran
return 20 --意外错误
end else
begin
commit tran
return 1
end
2.取得自增编号,以便利用
在 insert 后
select @@identify
3.创建临时表
create procedure sumlogin
as
declare @count int
set @count=0
create table #temp
(spid smallint,
ecid smallint,
status nchar(30),
loginname nchar(128),
hostname nchar(128),
blk char(5),
dbname nchar(128),
cmd nchar(16)
)
insert into #temp exec sp_who
select @count=count(*) from #temp where upper(dbname)=upper(''fmeca'') and
status=''sleeping''
return @count
4.当存储过程返回表时,调用要用 open而不要用execsql
5。更新字段,当调用存储过程更新字段,而字段数目又不确定时
有的字段要更新,有的要保留,有时要全部更新,每次更新的不一定时
create proc updatetable (@f1 varchar(100),@f2 varchar(100)....)
as
update tabelname
set
field1=isnull(@f1,filed1),
field2=isnull(@f2,field2)
.....
from tablename
当不想更新时就传null对应相应的字段。
6.select ,update 不能直接调用存储过程,insert可以,见前面的例子
7。使用带一个变量的 EXECUTE ''tsql_string'' 语句
这个例子显示 EXECUTE 语句如何处理动态生成的、含有变量的字符串。这个例子创建 tables_cursor 游标来保存所有用户定义表 (type = U) 的列表。
说明 此例子只用作举例。
DECLARE tables_cursor CURSOR
FOR
SELECT name FROM sysobjects WHERE type = ''U''
OPEN tables_cursor
DECLARE @tablename sysname
FETCH NEXT FROM tables_cursor INTO @tablename
WHILE (@@FETCH_STATUS <> -1)
BEGIN
/* A @@FETCH_STATUS of -2 means that the row has been deleted.
There is no need to test for this because this loop drops all
user-defined tables. */.
EXEC (''DROP TABLE '' + @tablename)
FETCH NEXT FROM tables_cursor INTO @tablename
END
PRINT ''All user-defined tables have been dropped from the database.''
DEALLOCATE tables_cursor
8.访问不同的表
create proc dynamictable @tablename varchar(50)
as
declare @ssql varchar(200)
set @ssql=''select * from ''+@tablename
exec(@ssql)
9.使用带远程存储过程的 EXECUTE 语句
这个例子在远程服务器 SQLSERVER1 上执行 checkcontract 存储过程,在 @retstat 中保存返回状态,说明运行成功或失败。
DECLARE @retstat int
EXECUTE @retstat = SQLSERVER1.pubs.dbo.checkcontract ''409-56-4008''
10.使用带扩展存储过程的 EXECUTE 语句
下例使用 xp_cmdshell 扩展存储过程列出文件扩展名为 .exe 的所有文件的目录。
USE master
EXECUTE xp_cmdshell ''dir *.exe''
11.使用带一个存储过程变量的 EXECUTE 语句
这个例子创建一个代表存储过程名称的变量。
DECLARE @proc_name varchar(30)
SET @proc_name = ''sp_who''
EXEC @proc_name
12.使用带 DEFAULT 的 EXECUTE 语句
这个例子创建了一个存储过程,过程中第一个和第三个参数为默认值。当运行该过程时,如果调用时没有传递值或者指定了默认值,这些默认值就会赋给第一个和第三个参数。注意 DEFAULT 关键字有多种使用方法。
USE pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = ''proc_calculate_taxes'' AND type = ''P'')
DROP PROCEDURE proc_calculate_taxes
GO
-- Create the stored procedure.
CREATE PROCEDURE proc_calculate_taxes (@p1 smallint = 42, @p2 char(1),
@p3 varchar(8) = ''CAR'')
AS
SELECT *
FROM mytable
13.使用多个参数与一个输出参数
[B] 存储过程的return好像只能返回整数,要想返回浮点数,要用output[/B]
这个例子执行 roy_check 存储过程,传递三个参数。第三个参数 @pc 是输出参数。过程 执行完后,返回变量可以从变量 @percent 得到。
说明 roy_check 存储过程只是用作举例,pubs 数据库中并没有此过程。
DECLARE @percent int
EXECUTE roy_check ''BU1032'', 1050, @pc = @percent OUTPUT
SET Percent = @percent