主题:求一个存储过程的写法!
233238447
[专家分:1350] 发布于 2006-08-08 20:15:00
现在在做JSP 项目,把以前写的SQL server 差不多忘的一干二净了,这次,要用到SQL 了,束手无策啊,帮一下忙
题目如下:
在数据库中,有很多用户表
有主键 ID
ID是己知的条件
现在我想实现的功能是
编写一个存诸过程,将ID当条件传过去,并且带很多未知参数,参数类型是整型,比如输入参数 tableName,110,1,2,3
表示取出 tableName 中 ID 为 110 的 1,2,3 列的信息
怎么写啊,如果不用系统表最好了!!!~~
谢谢啊!!~~
回复列表 (共11个回复)
沙发
gggmmtddir [专家分:2690] 发布于 2006-08-09 13:38:00
并且带很多未知参数,最大时有多少个参数??有难度啊!!!!!!!!!!!
板凳
233238447 [专家分:1350] 发布于 2006-08-09 16:09:00
最多会有 10 个
如果无限制最好了!~
3 楼
gggmmtddir [专家分:2690] 发布于 2006-08-10 23:07:00
唉,能力有限.我做不到啊!自己动手.你可以考虑这样做,有点复杂,估计存储过程比较难吧.首先,是传表名,在存储过程中表名是不能为变量,我试了一下,怎么做都不行.期待高手吧.
sql="select * from "&tablename&" where id="&id
rst.fields(num1).name --针对的是取第num1+1列的列名
rst.fields(num1).value --针对是的取第num1+1列的值
4 楼
233238447 [专家分:1350] 发布于 2006-08-11 13:20:00
嗯咯,我做一下咯,看做的出来不
5 楼
233238447 [专家分:1350] 发布于 2006-08-11 13:22:00
declare @objid int,@objname char(40)
set @objname = 'tablename'
select name from sysobjects where id = object_id(@objname)
print @objname
获取传入的表名方法,再做一下啊! 不要放弃啊!
6 楼
233238447 [专家分:1350] 发布于 2006-08-11 14:48:00
但是我求不出 use_id是否等于传入的@use_id
我的语句是这样的 if exists(select * from (select name from sysobjecs where id= object_id(@tablename)) while use_id=@use_id)
执行失败
最后看了一下帮助
意思就是说,它查找并不是按照你的表名查找
指定要在 Transact-SQL 语句中使用的表或视图(带或不带别名均可)。可在语句中使用多达 256 个表。可将 table 变量指定为表源。
7 楼
233238447 [专家分:1350] 发布于 2006-08-11 15:08:00
获取表的数据己成功解决 ,哈哈,我成功了!~~~
8 楼
233238447 [专家分:1350] 发布于 2006-08-11 15:29:00
declare @tablename varchar(20) --第一个参数表名
declare @use_id varchar(20) --第二个参数表ID
set @use_id='110' --ID为110
set @tablename='usename' --表名为usename
declare @sql varchar(100) --执行的SQL语句
declare @exit varchar(200) --获取表ID的数据
set @exit='姓名'
if exists(select name from sysobjects where id=object_id(@tablename)) --查看是否存在本表
begin
set @sql='select '+@exit+'=use_id from '+@tablename+' where use_id='''+@use_id+'''' --SQL语句查询
insert into c exec(@sql) --查询的结果插入表C
end
else
return --如果不存在此表则无条件退出
if exists(select * from c where use_id=@use_id ) --看是否存为ID 为 110 的数据
select 信息='有这个表,并且存在本ID'
else
return --不存在无条件退出
好了,我想的太复杂了,呵呵,!!!! 帮我做下半部分啊,就是利用参数获取列名
你可以把它搞到一个字符串型参数里面,如下
传入值的时候,这样传 '1,2,3,4,5,6,.......'
获取的时候好获取
9 楼
233238447 [专家分:1350] 发布于 2006-08-11 15:29:00
各位大哥帮我做下半部分啊,真的我要做JSP项目抽不出空来了,小弟在此谢过了!!~~
10 楼
gggmmtddir [专家分:2690] 发布于 2006-08-11 16:23:00
create proc P_test
@tablename varchar(20),@id int,@col1 int
as
declare @sql nvarchar(500)
set @sql='select '+col_name(object_id(@tablename),@col1)+ ' from '+@tablename+' where id='+cast(@id as varchar(5))
exec(@sql)
正在改进中....
@tablename是你传入的表名,@id是传入的id号,@col1是传入的列号
我来回复