sql语句的逻辑问题:有一a表,里面有一字段tablename,需要以tablename为再次选择的表进行查询 50
sql语句的逻辑问题:有一a表以及多张其他表,a表中存有字段tablename和applyid,需要以tablename和applyid为条件再次选择其他表进行查询获取记...
sql语句的逻辑问题:有一a表以及多张其他表,a表中存有字段tablename和applyid,需要以tablename和applyid为条件再次选择其他表进行查询 获取记录
使用了存储过程如下,获取时不符合需求,不能一下子获取所有a表对应其他表的信息,每次需要指定其他表表名,如何实现根据a表数据获取所有其他表相关记录。 描述不清楚请追问
if (exists (select * from sys.objects where name = 'ListApply'))
drop proc ListApply
go
create proc ListApply
(@tablename nvarchar(50)
)
as
begin--定义一个 ifuchuan变量
declare @strsql nvarchar(500) -- 赋值给strsql countNum为 别名 记录数
set @strsql = 'select * from '+@tablename +' where ID in (SELECT applyid FROM ListOfApply)' --执行
print @strsql
exec(@strsql)
return
end
exec ListApply
@tablename='CXYD_Apply' 展开
使用了存储过程如下,获取时不符合需求,不能一下子获取所有a表对应其他表的信息,每次需要指定其他表表名,如何实现根据a表数据获取所有其他表相关记录。 描述不清楚请追问
if (exists (select * from sys.objects where name = 'ListApply'))
drop proc ListApply
go
create proc ListApply
(@tablename nvarchar(50)
)
as
begin--定义一个 ifuchuan变量
declare @strsql nvarchar(500) -- 赋值给strsql countNum为 别名 记录数
set @strsql = 'select * from '+@tablename +' where ID in (SELECT applyid FROM ListOfApply)' --执行
print @strsql
exec(@strsql)
return
end
exec ListApply
@tablename='CXYD_Apply' 展开
2个回答
展开全部
1.表名尽量不要用TABLE,这是保留字,假设用TABLENAME。
2.字段名不要用A,容易与于后面表别名混淆。假设为FILEDA吧。
3.更新表,要有条件,一般为关键字相同,设置你的表TABLENAME中为CELLID吧。
则有:
update tablename set fielda=fieldnew from
(select cellId, fieldnew=houseBigness*hotTime/(select sum(houseBigness*hotTime) from HotOnline.dbo.H_UsrV b where b.cellId=a.cellId) from HotOnline.dbo.H_UsrV a ) c,
tablename where tablename.cellid=c.cellid
当然,如果还没有创建TABLENAME表,可以直接创建,这样可以不用关键字段
select cellId, fieldA=houseBigness*hotTime/(select sum(houseBigness*hotTime) INTO TABLENAME from HotOnline.dbo.H_UsrV b where b.cellId=a.cellId) from HotOnline.dbo.H_UsrV a
但是,如果已建立了表A,并且表A是空的,也可以直接追加到表A中,这样需要知道TABLENAME的表结构,如TABLENAME为CELLID和FIELDA两个字段,那么这样将结果插入表TABLENAME中
INSERT INTO TABLENAME select cellId, fieldA=houseBigness*hotTime/(select sum(houseBigness*hotTime) INTO TABLENAME from HotOnline.dbo.H_UsrV b where b.cellId=a.cellId) from HotOnline.dbo.H_UsrV a
2.字段名不要用A,容易与于后面表别名混淆。假设为FILEDA吧。
3.更新表,要有条件,一般为关键字相同,设置你的表TABLENAME中为CELLID吧。
则有:
update tablename set fielda=fieldnew from
(select cellId, fieldnew=houseBigness*hotTime/(select sum(houseBigness*hotTime) from HotOnline.dbo.H_UsrV b where b.cellId=a.cellId) from HotOnline.dbo.H_UsrV a ) c,
tablename where tablename.cellid=c.cellid
当然,如果还没有创建TABLENAME表,可以直接创建,这样可以不用关键字段
select cellId, fieldA=houseBigness*hotTime/(select sum(houseBigness*hotTime) INTO TABLENAME from HotOnline.dbo.H_UsrV b where b.cellId=a.cellId) from HotOnline.dbo.H_UsrV a
但是,如果已建立了表A,并且表A是空的,也可以直接追加到表A中,这样需要知道TABLENAME的表结构,如TABLENAME为CELLID和FIELDA两个字段,那么这样将结果插入表TABLENAME中
INSERT INTO TABLENAME select cellId, fieldA=houseBigness*hotTime/(select sum(houseBigness*hotTime) INTO TABLENAME from HotOnline.dbo.H_UsrV b where b.cellId=a.cellId) from HotOnline.dbo.H_UsrV a
追问
谢谢你的回答,不过好像跟我的问题不匹配,你没有理解我的意思吧,有一a表以及多张其他表,a表中存有字段tablename和applyid,需要以tablename和applyid为条件再次选择其他表进行查询 获取记录
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询