标题:大家看一下,这个 SQL 语句怎么修改!
只看楼主
liudetao
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2014-11-3
得分:0 
回复 19 楼 tlliqi
其实我的意思是这样的,我想根据这个语句select 地籍号1 from MA33 where 地籍号1 like'660610%' ORDER BY 地籍号1,检索出满足相应条件的地籍号1字段中的数据,这个执行时也是正确的,没有问题!!!
 
那为什么还要加上这句代码呢?select tablename from mpdb_fldinf where fldname='特别',是这样的,前面语句中的MA33,是一个表,而且实际存在,但这个表我们信息系统每次生成的名字都不一样,这次是MA33,下次可能是MA68,名字不固定,但数据结构都是一样,而且都有数据,那我每次检索出满足相应条件的地籍号1字段中的数据时,都要去修改语句中的MA33,很麻烦!但这个不固定名字的表,它的名称在后面语句中的mpdb_fldinf表中的tablename字段中存在,只要满足where fldname='特别'这个条件,就可查询出这个表名!! 这样的话,我就不用每次都去修改这个语句select 地籍号1 from MA33 where 地籍号1 like'660610%' ORDER BY 地籍号1中的MA33表名了!!!

[ 本帖最后由 liudetao 于 2014-11-7 14:07 编辑 ]
2014-11-07 14:00
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:0 
概念要弄清,表内容和表名、字段名和表名
你的问题我看明白了 你说的也明白 其实你是想用变量来提供表名
****************
select tablename from mpdb_fldinf where fldname='特别'----------这个tablename其实就是你想要的表名,
select 地籍号1 from (select tablename from mpdb_fldinf where fldname='特别') where 地籍号1 like'660610%' ORDER BY 地籍号1----你想想这括号中的是一个表名吗?
建议:把括号中的字段存入变量,即:变量=tablename
select 地籍号1 from 变量 where 地籍号1 like'660610%' ORDER BY 地籍号1

这样符合你想要的了,不是吗?
2014-11-07 14:30
liudetao
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2014-11-3
得分:0 
回复 22 楼 tlliqi
谢谢,太感谢了!!
2014-11-07 14:42
liudetao
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2014-11-3
得分:0 
回复 22 楼 tlliqi
唉,试了赋变量,可还是不行,大侠帮帮忙,写的细些,谢谢了!!1
2014-11-07 15:24
tanxiaobin
Rank: 2
等 级:论坛游民
威 望:4
帖 子:20
专家分:41
注 册:2014-9-22
得分:0 
declare @tablename varchar(500),@sql varchar(5000)

select @tablename=tablename from mpdb_fldinf where fldname='特别'

set @sql='select 地籍号1 from '+@tablename+' where 地籍号1 like''660610%'' ORDER BY 地籍号1'

exec (@sql)

你试试看行不行?
2014-11-07 16:08
liudetao
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2014-11-3
得分:0 
回复 25 楼 tanxiaobin
可以,输出结果是正确的,谢谢!
2014-11-07 16:13
tanxiaobin
Rank: 2
等 级:论坛游民
威 望:4
帖 子:20
专家分:41
注 册:2014-9-22
得分:0 
不过你要确保你的MA33和mpdb_fldinf这两张表要在同一个库里面
2014-11-07 16:14
liudetao
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2014-11-3
得分:0 
回复 25 楼 tanxiaobin
朋友,这些语句放在EXCEL的VBA中代码应该如何修改呢?

我的VBA是这样的:
Sub GetData1()
     
     
     Dim server As String
     Dim strDatabase As String
     Dim user As String
     Dim pwd As String
     Dim djhcx As String

     server = Cells(3, 8).Value
     strDatabase = Cells(4, 8).Value
     user = Cells(5, 8).Value
     pwd = Cells(6, 8).Value
     djhcx = Cells(7, 8).Value
   
     Dim conn0
     Set conn0 = CreateObject("ADODB.Connection")
     conn0.Open ("driver={SQL Server};server=" & server & ";uid=" & user & ";pwd=" & pwd & ";database=" & strDatabase & ";")
     sql0 = "select 地籍号1 from MA33 where 地籍号1 like'" & djhcx & "%' ORDER BY 地籍号1"
     sql00 = "select count(*) as 记录数 from MA33 where 地籍号1 like'" & djhcx & "%'"
     Dim ds0
     Set ds0 = CreateObject("ADODB.Recordset")
     With ds0
         .Open sql0, conn0
         Range("a2:a65536").ClearContents
         Range("a1").Offset(1, 0).CopyFromRecordset ds0
     End With
     Set ds0 = Nothing
     
     Dim ds00
     Set ds00 = CreateObject("ADODB.Recordset")
     With ds00
         .Open sql00, conn0
         MsgBox "从EXCEL第二行格开始,根据数据查询条件" & djhcx & ",共从苍穹图形库" & strDatabase & "中读取" & ds00("记录数") & "条数据记录更新到EXCEL的A列(图形地籍号)之中!", 16, "A列(图形地籍号)数据更新"
     End With
     Set ds00 = Nothing
     
     conn0.Close
     Set conn0 = Nothing
     
     MsgBox "此次数据更新完成!", 16, "温馨提示"
  
        
     Exit Sub
   
  
End Sub



[ 本帖最后由 liudetao 于 2014-11-7 17:09 编辑 ]
2014-11-07 16:38
mxbing1984
Rank: 7Rank: 7Rank: 7
来 自:贵州道真
等 级:贵宾
威 望:37
帖 子:73
专家分:342
注 册:2014-8-8
得分:5 
1.拼SQL
Declare @Table Varchar(100)
Select @Table=tablename as 地籍号1 from mpdb_fldinf where fldname='地籍号'
Exec ('select 地籍号1 from '+@Table+ ' where 地籍号1 like'660610%' ORDER BY 地籍号1')

2.用存储过程
Exec sp_msforeachtable @command1="select 地籍号1 from ? where 地籍号1 like'660610%' ORDER BY 地籍号1",@WhereAnd=" And o.name in (Select tablename from mpdb_fldinf where fldname='地籍号')"

天再高,踮起脚尖就能更接近阳光
2014-11-08 08:34
liudetao
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2014-11-3
得分:0 
回复 29 楼 mxbing1984
朋友,拼SQL如何弄,再详细些提示,谢谢!     
我这样拼了一下,可是提示“:冒号附近存在语句错误!”
sql0 = "Declare @Table Varchar(100):Select @Table=tablename from tx.mpdb_fldinf where fldname='地籍号':Exec ('select 地籍号1 from '+@Table+ ' where 地籍号1 like''660610%'' ORDER BY 地籍号1')"



[ 本帖最后由 liudetao 于 2014-11-8 12:08 编辑 ]
2014-11-08 09:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-438057-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.407820 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved