表CraneTrends结构如下:其中 TableName字段中存的是另外一张表的表名,不同的CraneType 对应不同的表,现在我想根据CraneType的值来查询其对应的CraneOperation表的内容,但是不知道sql语句应该怎么写,请高手帮帮忙?谢了SQL Server多表查询

解决方案 »

  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.   


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

  4.   


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

  5.   


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

  6.   

    我用你的方法查询出来的结果是并且不管传进去的CraneType是什么值,结果都是这个,我的CraneOperation表结构是:我想要的就是这种效果
      

  7.   


    举个例子呗,我sql很差,还有就是我是用三层架构的,你说的动态sql不会是存储过程吧2楼已经写了,我就不累赘了
    版主您就给写个呗,多一种方法就多一种思考,让后来人也好跟您学习学习
      

  8.   

    ----------------------------------------------------------------
    -- 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=@CraneTypeEXEC( @sql)
      

  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=@CraneTypeEXEC( @sql)
      

  10.   

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

  11.   


    谢谢版主啊,不过我根据你之前给我的那个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)再次谢谢版主!
      

  12.   

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