注册 登录
编程论坛 SQL Server论坛

关于传入参数的存储过程,需要将传入的参数得到执行

问中学中问 发布于 2010-04-25 15:39, 1311 次点击
关于传入参数的存储过程,需要将传入的参数得到执行.
请注意看红色标识的地方:
if exists(select * from sysobjects where name='sell')
drop proc sell
go
create proc sell
    as
        begin
            set implicit_transactions on
            begin transaction
            declare @errorSum int,@sql1 varchar(300),@sql2 varchar(300),@sql3 varchar(300)
            set @errorSum=0
            --1.如何写,相要的最终结果是,把传入的3句sql语句,得到执行。
            --2.那么在程序中,我要怎么样才知道它是成功执行了还是回滚了.怎么带出想要的参数?

            if(@errorSum<>0)
                rollback transaction               
            else
                commit transaction
                    
        end
--调用存储过程-->传入参数
EXEC sell @sql1=想要得到执行的sql语句1         
          @sql2=想要得到执行的sql语句2
          @sql3=想要得到执行的sql语句3            
10 回复
#2
MIQIKing2010-04-26 06:50

if exists(select * from sysobjects where name='sell')
drop proc sell
go
create proc sell
    as
        begin
            set implicit_transactions on
            begin transaction
            declare @errorSum int,@sql1 varchar(300),@sql2 varchar(300),@sql3 varchar(300)
            set @errorSum=0
            if(@errorSum<>0)
                begin
                    raiserror('输入错误',16,1)
                    rollback transaction
                end               
            else
                commit transaction
                    
        end


DECLARE @errorSum int,@sql1 varchar(300),@sql2 varchar(300),@sql3 varchar(300)
EXEC sell  a,b,c
#3
cnfarer2010-04-26 10:30
在存储过程中定义一个返回值变量,用于存放返回值,在存储过程中用return语句返回。初始值为0
当第一句出现错误时,给它加上一个值比如1
当第二句出现错误时,给它加上另一值比如2
当第三句出现错误时,给它加上另一值比如4
这样通过返回值就知道哪句正常执行了。返回0,全部执行,返回1,第一句出错。。。返回3,第1,2句出错,返回5第1,3句出错返回7全部出错,返回6第2,3句出错。


#4
问中学中问2010-04-26 13:15
回复2 楼
    我想要传入的sql语句得到执行啊. 怎么做?
#5
问中学中问2010-04-26 13:17
回复3 楼
    看得有点抽象,能抽点时间写下吗?谢谢
#6
aei1352010-04-26 14:20
if exists(select * from sysobjects where name='sell')
drop proc sell
go
create proc sell
@sql1 varchar(300),@sql2 varchar(300),@sql3 varchar(300)
   as
        begin
            set implicit_transactions on
            begin transaction
            declare @errorSum int
            set @errorSum=0
            if(@errorSum<>0)
                begin
                    raiserror('输入错误',16,1)
                    rollback transaction
                end               
            else
                exec (@sql1)
                exec (@sql2)
                exec (@sql3)
                commit transaction
                    
        end

EXEC sell @sql1='',@sql2='',@sql3=''
#7
问中学中问2010-04-26 14:57
回复6 楼

比如说:
自么赋值啊?老报错,如insert附近有语法错误,@sql2,@sql3附近有语法错误
@errorSum未定义
EXEC sell @sql1='',@sql2='',@sql3=''
#8
aei1352010-04-26 17:08
insert附近有语法错误可能是你的语句写得有问题,比如sql语句是insert into table1(column1,column2) values(1,'abc')
你得写成 exec sell @sql='insert into table1(column1,column2) values(1,''abc'')'才行
#9
问中学中问2010-04-26 17:24
哦.这样的啊。呵呵
Ok进行下一个问题:
    那么在程序中我如何知道 此存储过程是提交了不是回滚了?
也可以说
declare @errorSum int
            set @errorSum=0
sql语句+set @errorSum=@@error+@errorSum传进去的时候报错,未定义.那么怎么在sql语句后设置这个
#10
aei1352010-04-27 09:42
if exists(select * from sysobjects where name='sell')
drop proc sell
go
create proc sell
@sql1 varchar(300),@sql2 varchar(300),@sql3 varchar(300)
   as
        begin
            set implicit_transactions on
            begin transaction
                if(@@error<>0)
                begin
                    raiserror('事务已滚回!',16,1)
                    rollback transaction
                    print @@error
                end               
            else
                begin
                exec (@sql1)
                exec (@sql2)
                exec (@sql3)
                commit transaction
                end
        end

EXEC sell @sql1='',@sql2='',@sql3=''
#11
问中学中问2010-04-27 14:34
辛苦了
1