如何动态替换sql中的表名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何动态替换sql中的表名相关的知识,希望对你有一定的参考价值。

把表名称等设置成参数,再写在sql语句字符串中:
String tableName="yourTableName";
String id="123456";
String sql="select * from "+yourTableName+" where id='"+id+"'";
拼接时注意双引号、单引号、空格的运用。
参考技术A declare @tableName as nvarchar(50)
declare @strSQL as nvarchar(4000)
set @tableName='表名称'
set @strSQL='select * from '+@tableName
exec(@strSQL)

解析sql中的表名

最近的项目需求中需要解析sql得表名,由于只需要表名我觉得应该用相对粗暴一点的方式来解析

初步思路:

1.转义字符:去除两个引号连在一起的

2.字符串: 去除所有被引号包裹的

3.括号:识别括号处理

4.关键字: 用关键字切割语句,去除与表名 无关的

5.解析与表名有关的切割分段得表名

 

先是粗暴的括号处理

def get_str(s):
you = 0
st = []
re = ‘‘
max_you = 0
for ii in s:
st.append(ii)
while st:
tmp = st.pop()
re = tmp + re
if tmp == ‘)‘:
you += 1
if max_you < you:
max_you = you
elif tmp == ‘(‘:
you -= 1
if you == 0:
return [re, max_you]
return [s, max_you]


s = "(1,2,(a,b),3,4,(a,b,(0,c,s,1000),(1,a,1200),(2,1400),(3,1600),(4,1800),n,m),((sd,df),(sw,gt))t,b)"

array = []
array_level = []

for ch in range(len(s)):
if s[ch] == ‘)‘:
next_str = get_str(s[:ch+1])
while len(array_level) < next_str[1]:
array_level.append([])
array.append(next_str[0])
array_level[next_str[1]-1].append(next_str[0])


print array
print ‘-‘ * 60
for i in array_level:
print i

以上是关于如何动态替换sql中的表名的主要内容,如果未能解决你的问题,请参考以下文章

使用SQL Server和Mysql查询所有数据库名表名和字段名

SQL Server2019数据库查询所有数据库名表名表结构表字段主键方法演示,执行sql提示对象名‘user_tab_columns‘ ‘user_cons_columns‘ 无效问题解决

SQL(MySQL + PHP) 查询,查询排名,表内一个人多条数据,查出最大的那条排名,请问!

根据 sys.tables 中的名称声明一个变量,然后在动态 SQL 中根据该变量删除表

mysqldump

sql server存储过程如何动态生成表名