sql server的存储过程问题,比较奇特(100分)

  • 主题发起人 pengjinlongex
  • 开始时间
P

pengjinlongex

Unregistered / Unconfirmed
GUEST, unregistred user!
我在SQL SERVER 中建有一个存储过程PROC1,它返回一个数据集,现在我想作一个
查询,该查询是在PROC1的基础上进行筛选,即将PROC1作为我的查询数据表,我该
怎么做,各位FW帮忙
 
我不想用临时表
 
大虾们,帮帮我呀
 
用过滤不就可以了
 
我想在SQL服务端内完成
 
那你就修改存储过程,
 
存储过程是以前的,别的系统也在用
 
新建一个存储过程,所有语句从原来的存储过程中拷贝,在加入过滤处理。
 
ft!!
那你就新建一个存储过程,把原来的copy过来改呀~~
 
你再写个存储过程了,把你这个存储过程给放到里面执行,将结果再做过滤了。
把你现有的存储过程当一句SQL语句在你新的存储过程中执行。
Exec sp_sqlexec +******
 
同意,供你程序使用的存储过程就应该是由更加小的存储过程的组合嘛。堆房子而已。
新的存储过程调用原先的存储过程,再加上新的条件显示给你,不是很棒吗?很好。
 
你的MSSQL如果是2000的话,那你可以把存储过程改装成用户自定义函数(返回表变量的)
(如果不会就把存储过程的代码贴出来,我帮你改)。
调用时:select * from dbo.你的函数名 where 你的过渡条件即可
 
to newyu_1127
假如我有存储过程如下
create procedure proc
as
select * from table1

请问怎么改
 
query.close;
query.sql.clear;
query.add('select * from dbo.proc where ....')
query.open;
 
不好意思,才回来。TO pengjinlongex,举个例子吧:
有表table1(id int,name varchar(30))
CREATE FUNCTION test( @name varchar(30) )
RETURNS table
AS
RETURN (SELECT * FROM table1 WHERE name=@name)
GO
调用时:select * from dbo.test('pengjinlongex')
 
to newyu_1127
假如我有存储过程如下
create procedure proc(@name varchar(50))
as
if @name=...

select * from table1
else
select * from table2

请问怎么改
 
TO :pengjinlongex
也一样这么写啊
CREATE FUNCTION test( @name varchar(30) )
RETURNS table
AS
if @name=...
RETURN (SELECT * FROM table1)
else
RETURN (SELECT * FROM table2)

GO

 
不对吧,你试试,函数里不允许有两个RETURN,否则抱错
 
to newyu_1127
谢谢你的关心,你将最少有50分,但请你回答我的最后疑问
我查看了SQL SERVER 的帮助,好象不允许有条件返回,但我的存储过程中就是根据
条件返回的不同数据记录,该如何改写
 
TO :pengjinlongex
也一样这么写啊
CREATE FUNCTION test( @name varchar(30) )
RETURNS table
AS
delare @SQLText as varchar
if @name=...
@SQLText=SELECT * FROM table1
else
@SQLText=SELECT * FROM table2
return exec @SQLText

GO

 
顶部