SQL 执行exec的返回值

有一存储过程:procAAA
该存储过程返回一条SQL命令字符串:'select * from AAA'
现在的问题是我想执行这个存储过程返回SQL命令字符串,
我以为这样能行:exec (exec procAAA)。
可是却错了,还问各位前辈们如何做到,谢谢了!

第1个回答  2011-08-25
直接改过程吧,你这个绕来绕去太麻烦。
这么改:
begin
declare @str varchar(4000)
set @str = 'select * from AAA'
exec @str
end
省得你还要取出来追问

上面只是个示例而以,我项目里的存储很多的,改的话又要加参数,而且调用端也要改,这样工作量相当大。

追答

改过程是最简单的方式,也可以更好的控制权限,如果前期没做好这些工作,后期维护起来会花费更多的时间。而且我写的这个并没有加参数吧,,调用段只用执行这个过程就可以了,不用改动

本回答被提问者采纳
第2个回答  2011-08-25
最好的办法是加一个存储过程PROCB。然后在存储过程中调用procAAA。把它的返回值复制个一个变量VAR
然后在新建的存储过程中。执行VAR;
你在最外出直接调用PROCB 即可追问

可不可以贴具体的代码上来,谢谢

第3个回答  2011-08-25
procAAA是怎么样返回的? out参数还是什么? 把这个存储过程贴出来追问

是这样的
create proc testAAA
as
begin
declare @str varchar(4000)
set @str = 'select * from AAA'
SELECT @str AS SQL
end

追答

非得这样写存储过程吗?为什么不用out参数?你要实现什么样的需求?

追问

现在是在维护一个项目,这项目里的存储就是这样写的,
要改的话那工作量可就很大了,
我需要的效果就是 先执行exec testAAA得到它返回的那个SQL命令字符串,
然后,在执行这个SQL命令字符串

追答

这样啊,那你是直接要在数据库上调用吗?比如一个存储过程里面需要这个结果?还是在什么语言上调用这个结果?

追问

恩,就是在数据库上需要得到这个结果。

追答

create table abc(col varchar(100))
insert into abc(col)
exec testAAA

select * from abc
就可以得出那条语句了 接下来你应该会了吧?有问题的话继续追问吧

追问

这样也不行,这样跟直接调那个存储过程一样的效果,还会多创建一个表,
如果多个用户同时使用这功能就会有问题,
而且这样也只能得到那个语句而以啊,我要是的执行那条语句。

追答

定义一个变量。获取那个表的那条数据也就是那字符串,然后调用动态语句是完全可行的。只是你说多个用户同时使用这个功能的话,那就顺便加个唯一值的主键字段吧

SQL 执行exec的返回值
直接改过程吧,你这个绕来绕去太麻烦。这么改:begin declare @str varchar(4000)set @str = 'select * from AAA'exec @str end 省得你还要取出来

sqlserver 存储过程 exec执行查询返回条数
存储过程定义语句中的变量带ouput选项就表示返回值的。比如:CREATE procedure sp_test $t_flag int output AS ...这里定义的 $t_flag 变量就是可以带出返回值的。在过程中对它赋值,调用过程的程序可以得到这个值。

sql server 如获得exec()执行语句的返回值
其实要分两种,一种是成功执行,另一种是执行失败抛出错误 建议使用sqlserver2005以后(看你用了max应该是2005以后的版本)新增的结构体begin try...end try...begin catch...end catch来捕获 ps.题外话,要保存中文,最好使用nvarchar,虽然存储空间增大了一倍,但是会避免有些情况下的乱码问题 ...

if(!sql_query.exec()) 是什么意思
DAS应该是一个数据访问封装对象,EXCESQL 是执行SQL语句的意思,其返回值为BOOL型,IF就是判断Das对象执行SQL后,返回值如是TRUE就执行自己的代码。

sql的关于exec
SQL Server 目前使用返回值 0 到 -14 来表示存储过程的执行状态。值–15 到 -99 留作后用。有关保留的返回状态值的列表的更多信息,请参见 RETURN。 因为远程存储过程和扩展存储过程不在事务的作用域中(除非在 BEGIN DISTRIBUTED TRANSACTION 语句中发出或者是和不同的配置选项一起使用),所以通过调用执行的命令...

SQL问题,用变量等于一个exec执行的sql值?急...
搂主如果指的 exec是个函数的话 那么以下是用时间函数做的一个例子 declare @cnt varchar(20)select @cnt = datepart(yyyy,'2005-5-5')select @cnt 如果搂主是指的是一个存储过程的话是需要指明一个函数为output的 在存储过程中赋值的,然后在外面就可以用这个函数了,具体的搂主可以去看下sql...

delphi 中如何使用sql 存储过程的返回值
写query控件SQL语句的时候这样写:Declare @r int Exec @r = myProc Select @r as result 然后Open,用FieldByNmae读取result字段的值

SQL 获取存储过程返回值
create proc usp_statistics a int output,b int output,c itn output as ...看倒定义后面的 output了吗?这样定义就能把值传出来。比如在查询分析器中, 定义了3个变量 a @b @c 然后执行存储过程 exec usp_statistics @a,@b,@c 这样@a @b @c的值就是执行存储过程后,传出来的值了 ...

mysql的PDO中 exec()函数和 execute()函数有什么区别呢?
exec执行一条SQL语句,并返回受影响的行数。此函数不会返回结果集合。execute函数是用于执行已经预处理过的语句,只是返回执行结果成功或失败。也就是说execute需要配合prepare函数使用,这个的确是麻烦了一点,每次都要先prepare,然后才能exec

sqlite_exec执行报错10
回调函数设置错误。p是一条你要执行的SQL语句,回调函数只有在select的时候才会作用,因此sqlite_exec执行报错10是回调函数设置错误。sqlite3_exec是sqlite3的接口API函数。

相似回答