说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

怎样通过参数来得到对应列的数据?

编辑:说三道四文库 发布时间:2018-07-18 07:00
HTML文档下载 WORD文档下载 PDF文档下载
有一张表mytbl
字段
ID int
d1 int
d2 int
...
d100 int

现在我想通过传入整数@RowID和@columnID找出对应的数据。
例:
ID D1 D2 D3 ... D100
1  1  3  6  ...   56
2  3  4  88  ...   568
...

要求:得到一个存储过程myPro @RowID int,@columnID int
执行exec myPro 2,3后 能print 88

源代码:
CREATE PROCEDURE  myPro
 @RowID int,@columnID int
as
declare @myResult int
  declare @mycolumnName char(8)
set @mycolumnName='d'+cast(@columnID as char(3))
select @mycolumnName from mytbl where ID=@RowID 
print @myResult
go
结果出错
搞不懂你的意思
CREATE PROCEDURE  myPro
 @RowID int,@columnID int
as
declare @myResult int
  declare @mycolumnName char(8)
set @mycolumnName='d'+cast(@columnID as char(3))
select @mycolumnName from mytbl where ID=@RowID 
print @mycolumnName
go
我有张表有很多列,我想通过一个列名参数得到某行中该列的值
不好意思,源代码是
源代码:
CREATE PROCEDURE  myPro
 @RowID int,@columnID int
as
declare @myResult int
  declare @mycolumnName char(8)
set @mycolumnName='d'+cast(@columnID as char(3))
select @myResult=@mycolumnName from mytbl where ID=@RowID 
print @myResult
go
结果出错

chinaandys(天煞孤星&&蛋炒饭) :
你的结果是:
D3
--存储过程
CREATE PROCEDURE myPro
@RowID int,
@columnID int
as
declare @s nvarchar(4000)
declare @myResult int
set @s='select @myResult=d'+rtrim(@columnID)+' from mytbl where ID=@RowID'
exec sp_executesql @s
,N'@RowID int,@myResult int out'
,@RowID,@myResult out
print @myResult
go
Declare Cur Cursor for
   SELECT dbo.syscolumns.name
FROM dbo.syscolumns INNER JOIN
      dbo.sysobjects ON dbo.syscolumns.id = dbo.sysobjects.id
Where dbo.sysobjects.Name='mytbl' And 
Right(dbo.syscolumns.name ,len(dbo.syscolumns.name)-1)<=@columnID And dbo.syscolumns.name<>'Id' 
Create Table #tmp(ID Int NULL)
Insert into #tmp(id)
Select id From mytbl Where id=@RowID 
Open Cur
Declare @Name Varchar(30)
Fetch Cur Into @Name
While @@Fetch_Status=0
     Begin
       Declare @str varchar(2000)
       Set @str='Alter table #tmp add '+@Name+' Int Null'
       Exec(@str)
       Set @str='Update #tmp  Set '+@Name+'=mytbl.'+@Name
       Exec(@str)
       Fetch Cur Into @Name
     End
Close Cur
Deallocate CUr
--测试

--测试数据
create table mytbl(ID int,d1 int,d2 int,d3 int,d100 int) --字段可以任意加
insert mytbl select 1,1,3,6 ,56
union  all   select 2,3,4,88,568
union  all   select 3,4,6,28,868
go

--存储过程
CREATE PROCEDURE myPro
@RowID int,
@columnID int
as
declare @s nvarchar(4000)
declare @myResult int
set @s='select @myResult=d'+rtrim(@columnID)+' from mytbl where ID=@RowID'
exec sp_executesql @s
,N'@RowID int,@myResult int out'
,@RowID,@myResult out
print @myResult
go

--调用
exec myPro 2,3
go

--删除测试
drop proc myPro
drop table mytbl

--测试结果: 88
zjcxc(邹建) 你的应该可以的,谢了!
/* ---------------------------------------------------------------------------------------------------------------------------
功能:判断某时刻下某仪表有无通讯数据
参数:@aMeterIDt:仪表编号;@aQuarterID:某时刻;@@yn :1:有数据;0:无数据
调用结果:@@yn :1:有数据;0:无数据
作者:张旭煜 2004-12-01
 --------------------------------------------------------------------------------------------------------------------------- */
CREATE PROCEDURE  sp_HaveNoData  
@aMeterID int,@aQuarterID int,@@yn bit output
as
declare @dayID int
declare @Column_name char(6)
declare @MeterData float
declare @intCount int

set @dayID=cast(dbo.getDayID(getdate()) as int)
set  @Column_name='data'+cast(@aQuarterID as char(2))
print @Column_name
print  @dayID --data27
--select  @MeterData=@Column_name  from meterData 

if  exists (select  * from meterData where DayID=@dayID)-- and ( @Column_name) isnull)
set @@yn=1
else
set @@yn=0

--print  @MeterData
--if  @MeterData>=0
--set @@yn=1
--else
--set @@yn=0
print  @@yn
GO
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘