sql server2008 多表联合查询,其中一张表的表名是另一张表的列值

时间:2022-10-31 00:26:21
表CraneTrends结构如下:
sql server2008 多表联合查询,其中一张表的表名是另一张表的列值
其中 TableName字段中存的是另外一张表的表名,不同的CraneType 对应不同的表,现在我想根据CraneType的值来查询其对应的CraneOperation表的内容,但是不知道sql语句应该怎么写,请高手帮帮忙?谢了

15 个解决方案

#1


select 'select * from '+tablename 
from cranetrends
where cranetype=你传入的参数

#2


CREATE TABLE TB(CraneType VARCHAR(10), TableName VARCHAR(255))
INSERT TB SELECT '003','CraneOperation3'

DECLARE @sql NVARCHAR(MAX),@CraneType VARCHAR(10) 
SET @CraneType = '003'

SET @sql = 
(
SELECT N'SELECT * FROM '+QUOTENAME(TableName)
FROM TB
where CraneType = @CraneType
)
--PRINT @sql
EXEC(@sql)

#3


引用 1 楼 DBA_Huangzj 的回复:
select 'select * from '+tablename 
from cranetrends
where cranetype=你传入的参数


这个执行的结果是一条sql语句啊,select * from CraneOperation1,我想要的是CraneOperation1表的内容

#4


丢进去动态SQL,exec就可以拉

#5


引用 4 楼 DBA_Huangzj 的回复:
丢进去动态SQL,exec就可以拉


举个例子呗,我sql很差,还有就是我是用三层架构的,你说的动态sql不会是存储过程吧

#6


引用 5 楼 moyanruo 的回复:
Quote: 引用 4 楼 DBA_Huangzj 的回复:

丢进去动态SQL,exec就可以拉


举个例子呗,我sql很差,还有就是我是用三层架构的,你说的动态sql不会是存储过程吧
2楼已经写了,我就不累赘了

#7


引用 2 楼 wwwwgou 的回复:
CREATE TABLE TB(CraneType VARCHAR(10), TableName VARCHAR(255))
INSERT TB SELECT '003','CraneOperation3'

DECLARE @sql NVARCHAR(MAX),@CraneType VARCHAR(10) 
SET @CraneType = '003'

SET @sql = 
(
SELECT N'SELECT * FROM '+QUOTENAME(TableName)
FROM TB
where CraneType = @CraneType
)
--PRINT @sql
EXEC(@sql)

我用你的方法查询出来的结果是
sql server2008 多表联合查询,其中一张表的表名是另一张表的列值
并且不管传进去的CraneType是什么值,结果都是这个,我的CraneOperation表结构是:
sql server2008 多表联合查询,其中一张表的表名是另一张表的列值
我想要的就是这种效果

#8


引用 6 楼 DBA_Huangzj 的回复:
Quote: 引用 5 楼 moyanruo 的回复:

Quote: 引用 4 楼 DBA_Huangzj 的回复:

丢进去动态SQL,exec就可以拉


举个例子呗,我sql很差,还有就是我是用三层架构的,你说的动态sql不会是存储过程吧
2楼已经写了,我就不累赘了

版主您就给写个呗,多一种方法就多一种思考,让后来人也好跟您学习学习

#9


----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-08-14 10:10:02
-- Version:
--      Microsoft SQL Server 2014 (CTP1) - 11.0.9120.5 (X64) 
-- Jun 10 2013 20:09:10 
-- Copyright (c) Microsoft Corporation
-- Enterprise Evaluation Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据:[CraneTrends]
if object_id('[CraneTrends]') is not null drop table [CraneTrends]
go 
create table [CraneTrends]([CraneType] varchar(3),[tablename] varchar(14))
insert [CraneTrends]
select '002','Craneopration' union all
select '003','Craneopration3' union all
select '001','Craneopration1'
--------------开始查询--------------------------
DECLARE @sql NVARCHAR(MAX),@CraneType VARCHAR(10) ='002'
SELECT @sql= 'select * from '+tablename 
from cranetrends
where cranetype=@CraneType

EXEC( @sql)

#10


----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-08-14 10:10:02
-- Version:
--      Microsoft SQL Server 2014 (CTP1) - 11.0.9120.5 (X64) 
-- Jun 10 2013 20:09:10 
-- Copyright (c) Microsoft Corporation
-- Enterprise Evaluation Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据:[CraneTrends]
if object_id('[CraneTrends]') is not null drop table [CraneTrends]
go 
create table [CraneTrends]([CraneType] varchar(3),[tablename] varchar(14))
insert [CraneTrends]
select '002','Craneopration' union all
select '003','Craneopration3' union all
select '001','Craneopration1'
--------------开始查询--------------------------
DECLARE @sql NVARCHAR(MAX),@CraneType VARCHAR(10) ='002'
SELECT @sql= 'select * from '+tablename 
from cranetrends
where cranetype=@CraneType

EXEC( @sql)

#11


select * from tb ,你造了啥数据呀
TableName 别都是 CraneOperation3

#12


引用 10 楼 DBA_Huangzj 的回复:
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-08-14 10:10:02
-- Version:
--      Microsoft SQL Server 2014 (CTP1) - 11.0.9120.5 (X64) 
-- Jun 10 2013 20:09:10 
-- Copyright (c) Microsoft Corporation
-- Enterprise Evaluation Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据:[CraneTrends]
if object_id('[CraneTrends]') is not null drop table [CraneTrends]
go 
create table [CraneTrends]([CraneType] varchar(3),[tablename] varchar(14))
insert [CraneTrends]
select '002','Craneopration' union all
select '003','Craneopration3' union all
select '001','Craneopration1'
--------------开始查询--------------------------
DECLARE @sql NVARCHAR(MAX),@CraneType VARCHAR(10) ='002'
SELECT @sql= 'select * from '+tablename 
from cranetrends
where cranetype=@CraneType

EXEC( @sql)


谢谢版主啊,不过我根据你之前给我的那个sql语句,琢磨出了个简单的方法

declare @sql nvarchar(max),@cranetype nvarchar(max)
set @sql=''
set @cranetype='001'
select @sql=@sql+'select * from ' +tablename from cranetrends where cranetype=@cranetype
select @sql
exec(@sql)

再次谢谢版主!

#13


你的方法也行...记得结贴

#14


引用 11 楼 di74jun 的回复:
select * from tb ,你造了啥数据呀
TableName 别都是 CraneOperation3

不会呀,传进去的CraneType不同,TableName也不同

#15


引用 13 楼 DBA_Huangzj 的回复:
你的方法也行...记得结贴

结过啦,查收吧

#1


select 'select * from '+tablename 
from cranetrends
where cranetype=你传入的参数

#2


CREATE TABLE TB(CraneType VARCHAR(10), TableName VARCHAR(255))
INSERT TB SELECT '003','CraneOperation3'

DECLARE @sql NVARCHAR(MAX),@CraneType VARCHAR(10) 
SET @CraneType = '003'

SET @sql = 
(
SELECT N'SELECT * FROM '+QUOTENAME(TableName)
FROM TB
where CraneType = @CraneType
)
--PRINT @sql
EXEC(@sql)

#3


引用 1 楼 DBA_Huangzj 的回复:
select 'select * from '+tablename 
from cranetrends
where cranetype=你传入的参数


这个执行的结果是一条sql语句啊,select * from CraneOperation1,我想要的是CraneOperation1表的内容

#4


丢进去动态SQL,exec就可以拉

#5


引用 4 楼 DBA_Huangzj 的回复:
丢进去动态SQL,exec就可以拉


举个例子呗,我sql很差,还有就是我是用三层架构的,你说的动态sql不会是存储过程吧

#6


引用 5 楼 moyanruo 的回复:
Quote: 引用 4 楼 DBA_Huangzj 的回复:

丢进去动态SQL,exec就可以拉


举个例子呗,我sql很差,还有就是我是用三层架构的,你说的动态sql不会是存储过程吧
2楼已经写了,我就不累赘了

#7


引用 2 楼 wwwwgou 的回复:
CREATE TABLE TB(CraneType VARCHAR(10), TableName VARCHAR(255))
INSERT TB SELECT '003','CraneOperation3'

DECLARE @sql NVARCHAR(MAX),@CraneType VARCHAR(10) 
SET @CraneType = '003'

SET @sql = 
(
SELECT N'SELECT * FROM '+QUOTENAME(TableName)
FROM TB
where CraneType = @CraneType
)
--PRINT @sql
EXEC(@sql)

我用你的方法查询出来的结果是
sql server2008 多表联合查询,其中一张表的表名是另一张表的列值
并且不管传进去的CraneType是什么值,结果都是这个,我的CraneOperation表结构是:
sql server2008 多表联合查询,其中一张表的表名是另一张表的列值
我想要的就是这种效果

#8


引用 6 楼 DBA_Huangzj 的回复:
Quote: 引用 5 楼 moyanruo 的回复:

Quote: 引用 4 楼 DBA_Huangzj 的回复:

丢进去动态SQL,exec就可以拉


举个例子呗,我sql很差,还有就是我是用三层架构的,你说的动态sql不会是存储过程吧
2楼已经写了,我就不累赘了

版主您就给写个呗,多一种方法就多一种思考,让后来人也好跟您学习学习

#9


----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-08-14 10:10:02
-- Version:
--      Microsoft SQL Server 2014 (CTP1) - 11.0.9120.5 (X64) 
-- Jun 10 2013 20:09:10 
-- Copyright (c) Microsoft Corporation
-- Enterprise Evaluation Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据:[CraneTrends]
if object_id('[CraneTrends]') is not null drop table [CraneTrends]
go 
create table [CraneTrends]([CraneType] varchar(3),[tablename] varchar(14))
insert [CraneTrends]
select '002','Craneopration' union all
select '003','Craneopration3' union all
select '001','Craneopration1'
--------------开始查询--------------------------
DECLARE @sql NVARCHAR(MAX),@CraneType VARCHAR(10) ='002'
SELECT @sql= 'select * from '+tablename 
from cranetrends
where cranetype=@CraneType

EXEC( @sql)

#10


----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-08-14 10:10:02
-- Version:
--      Microsoft SQL Server 2014 (CTP1) - 11.0.9120.5 (X64) 
-- Jun 10 2013 20:09:10 
-- Copyright (c) Microsoft Corporation
-- Enterprise Evaluation Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据:[CraneTrends]
if object_id('[CraneTrends]') is not null drop table [CraneTrends]
go 
create table [CraneTrends]([CraneType] varchar(3),[tablename] varchar(14))
insert [CraneTrends]
select '002','Craneopration' union all
select '003','Craneopration3' union all
select '001','Craneopration1'
--------------开始查询--------------------------
DECLARE @sql NVARCHAR(MAX),@CraneType VARCHAR(10) ='002'
SELECT @sql= 'select * from '+tablename 
from cranetrends
where cranetype=@CraneType

EXEC( @sql)

#11


select * from tb ,你造了啥数据呀
TableName 别都是 CraneOperation3

#12


引用 10 楼 DBA_Huangzj 的回复:
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-08-14 10:10:02
-- Version:
--      Microsoft SQL Server 2014 (CTP1) - 11.0.9120.5 (X64) 
-- Jun 10 2013 20:09:10 
-- Copyright (c) Microsoft Corporation
-- Enterprise Evaluation Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据:[CraneTrends]
if object_id('[CraneTrends]') is not null drop table [CraneTrends]
go 
create table [CraneTrends]([CraneType] varchar(3),[tablename] varchar(14))
insert [CraneTrends]
select '002','Craneopration' union all
select '003','Craneopration3' union all
select '001','Craneopration1'
--------------开始查询--------------------------
DECLARE @sql NVARCHAR(MAX),@CraneType VARCHAR(10) ='002'
SELECT @sql= 'select * from '+tablename 
from cranetrends
where cranetype=@CraneType

EXEC( @sql)


谢谢版主啊,不过我根据你之前给我的那个sql语句,琢磨出了个简单的方法

declare @sql nvarchar(max),@cranetype nvarchar(max)
set @sql=''
set @cranetype='001'
select @sql=@sql+'select * from ' +tablename from cranetrends where cranetype=@cranetype
select @sql
exec(@sql)

再次谢谢版主!

#13


你的方法也行...记得结贴

#14


引用 11 楼 di74jun 的回复:
select * from tb ,你造了啥数据呀
TableName 别都是 CraneOperation3

不会呀,传进去的CraneType不同,TableName也不同

#15


引用 13 楼 DBA_Huangzj 的回复:
你的方法也行...记得结贴

结过啦,查收吧