存储过程的参数怎么转换成一张表?

panxuan 2008-07-17 10:08:28
RT
...全文
178 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
popule_daisy 2008-07-18
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 hery2002 的回复:]
--这个是取得当前存储过程参数的,2005

SQL codeSELECT
params.NAME AS PARAM_NAME,
params.PARAMETER_ID AS PARAM_ID,
params.MAX_LENGTH AS PARAM_LENGTH,
CASE params.SYSTEM_TYPE_ID
WHEN 34 THEN 'IMAGE'
WHEN 35 THEN 'TEXT'
WHEN 48 THEN 'TINYINT'
WHEN 52 THEN 'SMALLINT'
WHEN 56 THEN 'INT'

[/Quote]
hery2002 2008-07-17
  • 打赏
  • 举报
回复
--这个是取得当前存储过程参数的,2005
SELECT 
params.NAME AS PARAM_NAME,
params.PARAMETER_ID AS PARAM_ID,
params.MAX_LENGTH AS PARAM_LENGTH,
CASE params.SYSTEM_TYPE_ID
WHEN 34 THEN 'IMAGE'
WHEN 35 THEN 'TEXT'
WHEN 48 THEN 'TINYINT'
WHEN 52 THEN 'SMALLINT'
WHEN 56 THEN 'INT'
WHEN 58 THEN 'SMALLDATETIME'
WHEN 59 THEN 'REAL'
WHEN 60 THEN 'MONEY'
WHEN 61 THEN 'DATETIME'
WHEN 62 THEN 'FLOAT'
WHEN 99 THEN 'NTEXT'
WHEN 104 THEN 'BIT'
WHEN 106 THEN 'DECIMAL'
WHEN 122 THEN 'SMALLMONEY'
WHEN 127 THEN 'BIGINT'
WHEN 165 THEN 'VARBINARY'
WHEN 167 THEN 'VARCHAR'
WHEN 173 THEN 'BINARY'
WHEN 175 THEN 'CHAR'
WHEN 231 THEN 'NVARCHAR'
WHEN 239 THEN 'NCHAR'
ELSE 'MISSING'
END AS PARAM_TYPE ,
params.IS_OUTPUT AS PARAM_OUTPUT
FROM
sys.parameters params,sys.objects obj
WHERE params.OBJECT_ID = OBJECT_ID(N'p_test')
ORDER BY params.PARAMETER_ID
hery2002 2008-07-17
  • 打赏
  • 举报
回复
p1 p2 p3 p4 p5 p6 p7
Test1 Test2 Test3 Test4 Test5 Test6 Test7
这个数据从哪里来?
wgzaaa 2008-07-17
  • 打赏
  • 举报
回复
楼主不发话大家都在猜
wzy_love_sly 2008-07-17
  • 打赏
  • 举报
回复
感觉楼主说的是函数,但函数不能动态exec
中国风 2008-07-17
  • 打赏
  • 举报
回复
這樣?
create proc P1(@P1 int,@P2 nvarchar(100))
as
select p1=@P1,P2=@P2
go

exec p1 1,'a'
wzy_love_sly 2008-07-17
  • 打赏
  • 举报
回复
create proc p_test
@p1 nvarchar(100),
@p2 nvarchar(100),
@p3 nvarchar(100),
@p4 nvarchar(100),
@p5 nvarchar(100),
@p6 nvarchar(100),
@p7 nvarchar(100),
@tbname varchar(100)--表名得有吧
as
begin
exec('select '+@p1+','+@p2+','+@p3+' from ['+@tbname+']')
end
中国风 2008-07-17
  • 打赏
  • 举报
回复
create proc P1(@P1 int,@P2 nvarchar(100))
as
select p1=@P1,@2=@P2
中国风 2008-07-17
  • 打赏
  • 举报
回复

select p1=@P1,p2=p2......
panxuan 2008-07-17
  • 打赏
  • 举报
回复

create proc p_test
@p1 nvarchar(100),
@p2 nvarchar(100),
@p3 nvarchar(100),
@p4 nvarchar(100),
@p5 nvarchar(100),
@p6 nvarchar(100),
@p7 nvarchar(100)
as
begin
...
end

转换成可以这样
SELECT * FROM p_test
结果:
p1 p2 p3 p4 p5 p6 p7
Test1 Test2 Test3 Test4 Test5 Test6 Test7

Garnett_KG 2008-07-17
  • 打赏
  • 举报
回复
XML

05:


Create Proc spTest @tb XML
AS

DECLARE @rs table (id int)
INSERT INTO @rs
SELECT id.value('.')
FROM @tb.nodes('/root/id') as tmp(id)

.....


hery2002 2008-07-17
  • 打赏
  • 举报
回复
存储过程的参数转换成一张表?
是这样么?
如存储过程,
create proc p_test
@p1 nvarchar(100),
@p2 nvarchar(100),
@p3 nvarchar(100),
@p4 nvarchar(100),
@p5 nvarchar(100),
@p6 nvarchar(100),
@p7 nvarchar(100)
as
begin
...
end

楼主需要将@p1..@p7使用一个表返回来么?
还是什么意思?
ouyang76cn 2008-07-17
  • 打赏
  • 举报
回复
用动态语句,exec 和exec Sp_ExecuteSql都行
wzy_love_sly 2008-07-17
  • 打赏
  • 举报
回复
exec('select * from ['+@tbname+']')
昵称被占用了 2008-07-17
  • 打赏
  • 举报
回复
1楼理解可能错了

一个方法,把表名作为参数,存储过程里用动态语句实现
wgzaaa 2008-07-17
  • 打赏
  • 举报
回复
风,他说的是参数,至少也是输出参数吧,你这是数据集
中国风 2008-07-17
  • 打赏
  • 举报
回复

create proc p1
as
select 1,2
go

create table #T(ID int,ID2 int)
insert #T exec P1

select * from #T

go
也可用以下方式直接查
http://topic.csdn.net/u/20080612/22/bb2dfa83-1cf3-4a0b-9bd4-5a39e6193556.html
panxuan 2008-07-17
  • 打赏
  • 举报
回复
第一步 提取存储过程中的所有参数。
第二步 填充到DataSet中(是存储过程所有的参数,而非结果),作为表的结构。

或者
把存储过程中的所有参数,当做一张表的结构。
并非这样
exec('select '+@p1+','+@p2+','+@p3+' from ['+@tbname+']')


这具体怎么实现???越简单越好。
Oracle数据库设计策略及规范 设计策略及规范 1. 目的 定义Oracle数据库设计规范,作为数据库规划、设计、开发以及维护人员的技术参考资料。用以规范和指导相关人员的设计行为。 2. 概述 本文档根据Oracle数据库性能特点,描述对、视图、存储过程、对象命名等方面的设计规范。 3. 基本策略 3.1 设计策略 分类拆分数据量大的。 对于经常使用的(如某些参数或代码对照),由于其使用频率很高,要尽量减少中的记录数量。例如,银行的户主账原来设计成一张,虽然可以方便程序的设计与维护,但经过分析发现,由于数据量太大,会影响数据的迅速定位。如果将户主账分别设计为活期户主账、定期户主账及对公户主账等,则可以大大提高查询效率。 分区策略 在拥有数500行以上的时,采用分区策略。 索引设计。 对于大的数据库,合理的索引能够提高整个数据库的操作效率。在索引设计中,索引字段应挑选重复值较少的字段;在对建有复合索引的字段进行检索时,应注意按照复合索引字段建立的顺序进行。例如,如果对一个5万多条记录的流水以日期和流水号为序建立复合索引,由于在该中日期的重复值接近整个的记录数,用流水号进行查询所用的时间接近3秒;而如果以流水号为索引字段建立索引进行相同的查询,所用时间不到1秒。因此在大型数据库设计中,只有进行合理的索引字段选择,才能有效提高整个数据库的操作效率。 有时候为了提高性能。减少的关联,恰当的数据冗余是允许的。 索引对新增,删除,更新的性能影响比较大,对相关的的索引使用要权衡 为和索引建立不同的空间,禁止在系统空间中放入非核心oracle系统成分的对象, 确保数据空间和索引空间位于不同的磁盘磁盘驱动器上。 对于经常发生同时查询或频繁查询的,最好把他放到不同的磁盘空间上 4. 逻辑设计规范 4.1 范式 如果没有性能上的原因,应该使用关系数据库理论,达到较高的范式,避免数据冗余。 如果在数据量上与性能上无特别要求,考虑到实现的方便性可以有适当的数据冗余,但基本上要达到3NF。 4.2 设计 对于数据量比较大的,根据数据的属性进行分区,以得到较好的性能。如果按某些字段进行增长,则采用按字段值范围进行范围分区;如果按某个字段的几个关键值进行分布,则采用列分区;对于静态,则采用Hash分区或列分区;在范围分区中,如果数据按某关键字段均衡分布,则采用子分区的复合分区方法。 每个均创建类型为Sequence的主键字段。 每个中需含有如下几个基本字段:一个的SEQ号,4个创建信息字段,5-8个备用字段,一个删除标记字段,最好还有一个行版本字段 字段名 类型 备注 业务SEQ号 整数型 作为主键 OBLIGATE1 字符型 备用字段 OBLIGATE2 OBLIGATE3 OBLIGATE4 OBLIGATE5 CREATE_USER_ID VARCHAR 创建用户ID CREATE_DATETIME DATE 创建时间 LAST_UPDATE_USER_ID VARCHAR 更新用户ID LAST_UPDATE_DATETIME TIMESTAMP 更新时间 不要用Identify字段作为的主键与其它关联。 4.3 索引设计 常规OLTP应用,创建B-TREE索引,不创建位图索引。 不需要为小型数据(<5000)创建索引。 给单个创建的索引不超过5个,特别是海量交易类。 索引条件查询结果记录,不超总记录的20%。 不要给固定选项的字段创建独立索引。 如只有'男,女'的性别字段;'是,否'的状态字段等,不要创建独立索引,位可以建立复合索引。 对于复合索引,索引字段顺序比较关键,把查询频率比较高的字段排在索引组合的最前面。 索引放到独立的空间,该空间不需要REDO LOG。 含有外键约束的的字段,必须有单独索引。如订单明细的头外键。 5. 对象命名规范 5.1 一般规范 5.1.1 语言 命名使用英文单词,不使用复数。 Oracle数据库设计策略及规范全文共3页,当前为第1页。 英文单词使用同对象本身意义相对或相近的单词。选择最简单或最通用的单词。不能使用毫不相干的单词来命名。 Oracle数据库设计策略及规范全文共3页,当前为第1页。 当一个单词不能达对象含义时,用词组组合,如果组合太长时,采用简写或缩写,缩写要基本能达原单词的意义。 当出现对象名重名时,是不同类型对象时,加类型前缀或后缀以示区别。 禁止使用中文或拼音缩写进行命名 5.1.2 大小写 名称一律大写,以方便不同数据库移植,以及避免程序调用问题 5.1.3 单词分隔 命名的各单词之间使用下划线进行分隔。 命名的各单词之间不允许有空格存在 5.1.4 保留字 命名不允许使用SQL保留字。 5.1.5 

22,210

社区成员

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

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