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

请教两个存储过程的问题
今天初学存储过程,尝试自己写了一个:
ALTER   PROCEDURE   dbo.InsertLog  
(
@ThreadNo   int,
@Keyword   nvarchar(50),
@StartTime   datetime,
@SearchEngine   nvarchar(50)
)
AS
Insert   into   SearchLog(ThreadNo,Keyword,StartTime,SearchEngine)   values(@ThreadNo,@Keyword,@StartTime,@SearchEngine)
RETURN   @@error
问题如下:
1.表SearchLog中有个标识字段ID,我想在插入记录成功后返回新记录ID字段的值,若插入操作不成功则返回0,不知如何实现?
2.要进行操作的表能否通过参数传入?即是说我要将记录插入到哪个表是不确定的,它通过参数传进来。
希望前辈高人不吝赐教。

------解决方案--------------------
create PROCEDURE dbo.InsertLog
(
@ThreadNo int,
@Keyword nvarchar(50),
@StartTime datetime,
@SearchEngine nvarchar(50)
)
AS
Insert into SearchLog(ThreadNo,Keyword,StartTime,SearchEngine) values(@ThreadNo,@Keyword,@StartTime,@SearchEngine)
RETURN @@identity

可以啊,但是要用动态sql

exec();
sp_executesql

------解决方案--------------------
1、
判断一下@@error 的值
if @@error=0
return @@identity
else
return 0
2、
create procedure test
@table varchar(20),
@col1 varchar(10)
as
declare @sql varchar(1000)
set @sql= "insert into "+@table+ "(col1)values( ' "+@col1+ " ') "
exec(@sql)
GO