欢乐英雄,希望你给我讲解讲解动态查询,分数多多 :)

gfh21cn 2002-11-06 09:00:37
上个帖子已经结了
我对那个动态查询还是不太了解,你能再详细的讲讲吗
就是那个exec('select ...')

什么时候用到
怎么用
...全文
22 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
gfh21cn 2002-11-07
  • 打赏
  • 举报
回复
就是,就是
欢乐英雄跑哪儿去了:)
sjd163 2002-11-07
  • 打赏
  • 举报
回复
学习
angowb 2002-11-07
  • 打赏
  • 举报
回复
能把问题说得详细一点吗?我也搬个凳子!
763hua 2002-11-07
  • 打赏
  • 举报
回复
还有吗??期待之中
pzoon 2002-11-07
  • 打赏
  • 举报
回复
我也搬个凳子,,等............等...........等......怎么没有人 来 呢 ??????????????????????????????????????????
gfh21cn 2002-11-07
  • 打赏
  • 举报
回复
呵呵,欢迎发言
JamesJiang 2002-11-07
  • 打赏
  • 举报
回复
动态SQL语句,就是在SQL中执行动态构建的SQL语句,在SQL SERVER中是EXECUTE函数,在ORACLE中是EXECUTE IMMEDIATE。
由于C、C++是编译型的语言,所以如果你想在运行时指定某些代码,比如说你想读取一个文本文件并执行其中的内容,比如从文件中读到"printf("hello world!");"就打印“hello world!”,这在编译型的语言中是不可能直接做到的,但解释型语言就有可能,TSQL和PLSQL都是解释型的语言,他们都提供了这样的功能,当然,这种动态执行的功能大部分情况都是用在存储过程中,下面是一个简单的例子。
CREATE PROCEDURE dbo.sp_readtable
@strresult varchar(100) output,
@tbname varchar(20)
AS
BEGIN
if exists (select * from sysobjects where name = @tbname and xtype='U')//判断表名是不是存在
begin
exec ('select * from ' + @tbname)
select @strresult = 'Task completed!'
end
else
begin
select @strresult = 'Incorrect table name'
end
END
这个存储过程是工作在SQL SERVER下的,作用很简单,就是任意提供一个表名,返回它的所有记录,@tbname是表名的输入参数,@strresult是工作结果的输出参数
在实际工作过程中,有很多比较复杂的DB操作,用一般的JOIN和UNION操作不可能完成任务,当然我们也可以将任务分拆开来,在CLIENT端一步一步的做,但在某些情况下,比如说工作的中间结果集非常巨大而且次数很多,而真正的最终数据却很小,如果将逻辑全部放在CLIENT断,会带给CLIENT和DATABASE之间很大的传输压力,在这种情况下,存储过程就体现了它的性能优势,由于逻辑比较复杂,在存储过程将可能不可避免的用到临时表和各种组合查询,而在某些情况下,组合查询的最终执行算法并不是最优算法(因为DATABASE的算法分析要包容所有的情况),特别是用IN做为范围条件时,在这种条件下,使用动态SQL代替组合查询,往往能很大地提高性能。
JamesJiang 2002-11-07
  • 打赏
  • 举报
回复
不好意思,现在实在太忙,你先等等。
oyxiaoyu0 2002-11-06
  • 打赏
  • 举报
回复
进来前以为是组合查询呢,但看来不是了!!
搬个凳子!

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧