sql server 2000 中一个存储过程引用另一个存储过程的结果集

yyh 2010-04-09 05:55:14
sql server 2000 中一个存储过程引用另一个存储过程的结果集???? 除了临时表的方法还有别的方法么?
...全文
127 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyh 2010-04-14
  • 打赏
  • 举报
回复
怎么没人提意见了?
jwwyqs 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yangsisivsyinyuhui 的回复:]
怎么没人提意见了?
[/Quote]
帮你顶下吧
yyh 2010-04-12
  • 打赏
  • 举报
回复
先创建
create proc A
as
begin
select * from tableA
end

create proc B
as
begin
EXEC A
--这里得到tableA的结果集,我能不能在这里根据别的条件在查询得到的这个结果集。
end


-狙击手- 2010-04-11
  • 打赏
  • 举报
回复
强大。
--小F-- 2010-04-11
  • 打赏
  • 举报
回复
第一种方法: 使用output参数

USE AdventureWorks;
GO
IF OBJECT_ID ( 'Production.usp_GetList', 'P' ) IS NOT NULL
DROP PROCEDURE Production.usp_GetList;
GO
CREATE PROCEDURE Production.usp_GetList @product varchar(40)
, @maxprice money
, @compareprice money OUTPUT
, @listprice money OUT
AS
SELECT p.name AS Product, p.ListPrice AS 'List Price'
FROM Production.Product p
JOIN Production.ProductSubcategory s
ON p.ProductSubcategoryID = s.ProductSubcategoryID
WHERE s.name LIKE @product AND p.ListPrice < @maxprice;
-- Populate the output variable @listprice.
SET @listprice = (SELECT MAX(p.ListPrice)
FROM Production.Product p
JOIN Production.ProductSubcategory s
ON p.ProductSubcategoryID = s.ProductSubcategoryID
WHERE s.name LIKE @product AND p.ListPrice < @maxprice);
-- Populate the output variable @compareprice.
SET @compareprice = @maxprice;
GO


另一个存储过程调用的时候:

Create Proc Test
as
DECLARE @compareprice money, @cost money
EXECUTE Production.usp_GetList '%Bikes%', 700,
@compareprice OUT,
@cost OUTPUT
IF @cost <= @compareprice
BEGIN
PRINT 'These products can be purchased for less than
$'+RTRIM(CAST(@compareprice AS varchar(20)))+'.'
END
ELSE
PRINT 'The prices for all products in this category exceed
$'+ RTRIM(CAST(@compareprice AS varchar(20)))+'.'
第二种方法:创建一个临时表

create proc GetUserName
as
begin
select 'UserName'
end

Create table #tempTable (userName nvarchar(50))
insert into #tempTable(userName)
exec GetUserName

select #tempTable

--用完之后要把临时表清空
drop table #tempTable--需要注意的是,这种方法不能嵌套。例如:

procedure a
begin
...
insert #table exec b
end

procedure b
begin
...
insert #table exec c
select * from #table
end

procedure c
begin
...
select * from sometable
end

--这里a调b的结果集,而b中也有这样的应用b调了c的结果集,这是不允许的,
--会报“INSERT EXEC 语句不能嵌套”错误。在实际应用中要避免这类应用的发生。


第三种方法:声明一个变量,用exec(@sql)执行:

1);EXEC 执行SQL语句

declare @rsql varchar(250)
declare @csql varchar(300)
declare @rc nvarchar(500)
declare @cstucount int
declare @ccount int
set @rsql='(select Classroom_id from EA_RoomTime where zc='+@zc+' and xq='+@xq+' and T'+@time+'=''否'') and ClassroomType=''1'''
--exec(@rsql)
set @csql='select @a=sum(teststucount),@b=sum(classcount) from EA_ClassRoom where classroom_id in '
set @rc=@csql+@rsql
exec sp_executesql @rc,N'@a int output,@b int output',@cstucount output,@ccount output--将exec的结果放入变量中的做法
--select @csql+@rsql
--select @cstucount



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fredrickhu/archive/2009/09/23/4584118.aspx
nalnait 2010-04-11
  • 打赏
  • 举报
回复


INSERT INTO tablename
EXEC XXXXX @X,....

seai 2010-04-11
  • 打赏
  • 举报
回复
使用OPENROWSET是另个更复杂的技术。
htl258_Tony 2010-04-09
  • 打赏
  • 举报
回复
SQL2000不太方便,另一个过程最好写成表值函数。
SQL2005可以在过程内声明临时表或表变量,用INSERT 表 EXEC 过程名 来得到结果集。
东那个升 2010-04-09
  • 打赏
  • 举报
回复
表值函数返回。。。。。。
sgtzzc 2010-04-09
  • 打赏
  • 举报
回复
表变量?
索引简介 索引是根据数据库表一个或多个列的值进行排序的结构。索引提供指针以指向存储在表指定列的数据值,然后根据指定的排序次序排列这些指针。 数据库使用索引的方式与使用书的目录很相似,通过搜索索引找到特定的值,然后跟随指针到达包含该值的行。 索引键:用于创建索引的列。 索引类型  聚索引: 聚索引基于数据行的键值在表内排序和存储这些数据行。由于数据行按基于聚索引键的排序次序存储,因此聚索引对查找行很有效。每个表只能有一个索引,因为数据行本身只能按一个顺序存储。数据行本身构成聚索引的最低级别(叶子节点)。只有当表包含聚索引时,表内的数据行才按排序次序存储。如果表没有聚索引,则其数据行按堆方式存储。聚索引对于那些经常要搜索范围值的列特别有效。使用聚索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。例如:如果应用程序执行的一个查询经常检索某一日期范围内的记录,则使用聚索引可以迅速找到包含开始日期的行,然后检索表所有相邻的行,直到到达结束日期。这样有助于提高此类查询的性能。同样,如果对从表检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚(物理排序),避免每次查询该列时都进行排序,从而节省成本。        非聚索引 非聚索引具有完全独立于数据行的结构。非聚索引的最低行包含非聚索引的键值,并且每个键值项都有指针指向包含该键值的数据行。数据行不按基于非聚键的次序存储。如果一个表只有非聚索引,它的数据行将按无序的堆方式存储,非聚索引可以建多个。  唯一索引 唯一索引可以确保索引列不包含重复的值。在多列唯一索引的情况下,该索引可以确保索引列每个值组合都是唯一的。唯一索引既是索引也是约束。  复合索引 索引项是多个的就叫组合索引,也叫复合索引。复合索引使用时需要注意索引项的次序。 索引对性能的作用  使用索引的优点 1. 通过唯一性索引(unique)可确保数据的唯一性 2. 加快数据的检索速度 3. 加快表之间的连接 4. 减少分组和排序的时间  使用索引的原则 1. 在需要经常搜索的列上创建索引 2. 经常用于连接的列上创建索引 3. 经常需要根据范围进行搜索的列上创建索引 4. 经常需要排序的列上创建索引 5. 经常用于where子句的列上创建索引  不使用索引的原则 1. 查询很少使用和参考的列不建索引 2. 对只有少数值的列不建索引 3. 定义为text、image、bit的列不建索引 4. 当需要update性能远远高于select性能时不建或少建索引  常用命令 1. sp_helpindex : 报告表或视图上的索引信息 2. dbcc showcontig :显示指定表的数据和索引的碎片信息 3. dbcc dbreindex :重建指定数据库一个或多个索引 4. dbcc indexdefrag :整理指定表或视图的聚索引或辅助索引的碎片  创建索引 1. 定义索引时,可以指定每列的数据是按升序还是降序存储。如果不指定,则默认为升序 2. 为索引指定填充因子,可标识填充因子来指定每个索引页的填满程度。索引页上的空余空间量很重要,因为当索引页填满时,系统必须花时间拆分它以便为新行腾出空间。  优化索引 1. 重建索引(dbcc dbreindex) 2. 索引优化向导 3. 整理指定的表或视图的聚索引和辅助索引碎片(dbcc indexefrag)

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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