回 帖 发 新 帖 刷新版面

主题:求一个存储过程的写法!

现在在做JSP 项目,把以前写的SQL server 差不多忘的一干二净了,这次,要用到SQL 了,束手无策啊,帮一下忙
      

             题目如下:
在数据库中,有很多用户表
有主键 ID 
               ID是己知的条件
    现在我想实现的功能是

           编写一个存诸过程,将ID当条件传过去,并且带很多未知参数,参数类型是整型,比如输入参数 tableName,110,1,2,3
表示取出 tableName 中 ID 为 110 的 1,2,3 列的信息
    怎么写啊,如果不用系统表最好了!!!~~
 谢谢啊!!~~

回复列表 (共11个回复)

沙发

并且带很多未知参数,最大时有多少个参数??有难度啊!!!!!!!!!!!

板凳

最多会有 10 个
如果无限制最好了!~

3 楼

唉,能力有限.我做不到啊!自己动手.你可以考虑这样做,有点复杂,估计存储过程比较难吧.首先,是传表名,在存储过程中表名是不能为变量,我试了一下,怎么做都不行.期待高手吧. 
sql="select * from "&tablename&" where id="&id
rst.fields(num1).name --针对的是取第num1+1列的列名
rst.fields(num1).value --针对是的取第num1+1列的值

4 楼

嗯咯,我做一下咯,看做的出来不

5 楼

declare @objid int,@objname char(40)
set @objname = 'tablename'
select name from sysobjects where id = object_id(@objname)

print @objname

        获取传入的表名方法,再做一下啊! 不要放弃啊!

6 楼

但是我求不出 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 楼

获取表的数据己成功解决 ,哈哈,我成功了!~~~

8 楼

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 楼

各位大哥帮我做下半部分啊,真的我要做JSP项目抽不出空来了,小弟在此谢过了!!~~

10 楼

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是传入的列号

我来回复

您尚未登录,请登录后再回复。点此登录或注册