知道字段名,如何根据该字段的值查找到表名

问题描述

知道字段名,并且每张表都有该字段,在程序代码中如何根据字段值得到该字段值所在的表名。例如:每张表中都有Name这个字段,如何根据字段值'Zs',查找出该字段值所在的表从网上找到的都是在SQLServer里执行的,那在WinForm程序代码中该怎么写呢?

解决方案

解决方案二:
sqlserversql语句就能查找到,你在winform中再用ado.net执行这条sql语法返回就可以了。
解决方案三:
引用1楼guwei4037的回复:

sqlserversql语句就能查找到,你在winform中再用ado.net执行这条sql语法返回就可以了。

那个好多,好复杂,看不太懂,不知道怎么改DECLARE@whatvarchar(800)SET@what='%Zs%'--要搜索的字符串DECLARE@sqlStrvarchar(8000)DECLARETableCursorCURSORLOCALFORSELECTsqlStr='IFEXISTS(SELECT1FROM['+o.name+']WHERE['+c.name+']LIKE''%'+@what+'%'')PRINT''['+o.name+']'''FROMsyscolumnscJOINsysobjectsoONc.id=o.idWHEREo.xtype='U'ANDc.status>=0ANDc.xusertypeIN(175,239,231,167)OPENTableCursorFETCHNEXTFROMTableCursorINTO@sqlStrWHILE@@FETCH_STATUS=0BEGINEXEC(@sqlStr)FETCHNEXTFROMTableCursorINTO@sqlStrENDCLOSETableCursorDEALLOCATETableCursor

解决方案四:
楼主还是不要瞎想了,这种操作本身并不难,只是太奇葩,只要对数据库有一定了解都能办到.
解决方案五:
引用3楼tcmakebest的回复:

楼主还是不要瞎想了,这种操作本身并不难,只是太奇葩,只要对数据库有一定了解都能办到.

那该怎么解决呢,我程序要用到这些操作
解决方案六:
引用4楼weiyf27的回复:

Quote: 引用3楼tcmakebest的回复:
楼主还是不要瞎想了,这种操作本身并不难,只是太奇葩,只要对数据库有一定了解都能办到.

那该怎么解决呢,我程序要用到这些操作

2楼的SQL语句是可以直接在程序执行的你将他当作SQL语句去使用就可以了。不要以为SQL真的只有增删改查才可以执行
解决方案七:
引用5楼fei2yun的回复:

2楼的SQL语句是可以直接在程序执行的你将他当作SQL语句去使用就可以了。不要以为SQL真的只有增删改查才可以执行

我把2楼的代码全放在sqlStr里了,为什么dt里没数据呢?DataTabledt=GetDsFromSql(sqlStr).Tables[0];

publicstaticDataSetGetDsFromSql(stringsqlStr){stringstrConnection="...数据库连接正常...";SqlConnectionconn=newSqlConnection(strConnection);DataSetds=newDataSet();try{conn.Open();SqlDataAdapterda=newSqlDataAdapter(sqlStr,conn);da.Fill(ds);}catch(Exceptione){ds.Tables.Add("TempTable");}conn.Close();returnds;}

解决方案八:
--建一个存储过程,然后你在代码里面调用这个存储过程就可以了--返回多个表,每表仅有一行一列,里面的值就是你要的tablenamecreateprocproc_GetTableName@columnvarchar(50),@valuevarchar(50)asbegindeclare@tablevarchar(50)declarecurcursorforselectnamefromsysobjectswheretype='U'opencurfetchnextfromcurinto@tablewhile(@@fetch_status=0)beginif(col_length(@table,@column)isnotnull)begindeclare@sqlnvarchar(4000)declare@resultintset@sql='select@count=count(1)from'+@table+'where'+@column+'like''%'+@value+'%'''execsp_executesql@sql,N'@countintoutput',@resultoutputif(@result>0)beginselect@tableendendfetctnextfromcurinto@tableendclosecurdeallocatecurend

解决方案九:
引用6楼weiyf27的回复:

Quote: 引用5楼fei2yun的回复:
2楼的SQL语句是可以直接在程序执行的你将他当作SQL语句去使用就可以了。不要以为SQL真的只有增删改查才可以执行

我把2楼的代码全放在sqlStr里了,为什么dt里没数据呢?DataTabledt=GetDsFromSql(sqlStr).Tables[0];

publicstaticDataSetGetDsFromSql(stringsqlStr){stringstrConnection="...数据库连接正常...";SqlConnectionconn=newSqlConnection(strConnection);DataSetds=newDataSet();try{conn.Open();SqlDataAdapterda=newSqlDataAdapter(sqlStr,conn);da.Fill(ds);}catch(Exceptione){ds.Tables.Add("TempTable");}conn.Close();returnds;}

2楼的是print出来,所以你的代码接收不到.思路是一样的,建立游标从系统表里面读出所有的tablenameselectnamefromsysobjectswheretype='U'然后遍历,判断表是否存在你指定的列if(col_length(@table,@column)isnotnull)最后,有指定列的表,就根据wherecolumnlike'%'+value+'%'去读取是否有指定的指,读取到之后selecttablename出来.
解决方案十:
http://blog.csdn.net/yangyi22/article/details/7555662
解决方案十一:
这是SQL注入的范畴,LZ可以找度娘查查
解决方案十二:
引用8楼BitCoffee的回复:

2楼的是print出来,所以你的代码接收不到.思路是一样的,建立游标从系统表里面读出所有的tablenameselectnamefromsysobjectswheretype='U'然后遍历,判断表是否存在你指定的列if(col_length(@table,@column)isnotnull)最后,有指定列的表,就根据wherecolumnlike'%'+value+'%'去读取是否有指定的指,读取到之后selecttablename出来.

执行7楼代码加Execproc_GetTableName'Name','Zs'吗?
解决方案十三:
引用11楼weiyf27的回复:

Quote: 引用8楼BitCoffee的回复:
2楼的是print出来,所以你的代码接收不到.思路是一样的,建立游标从系统表里面读出所有的tablenameselectnamefromsysobjectswheretype='U'然后遍历,判断表是否存在你指定的列if(col_length(@table,@column)isnotnull)最后,有指定列的表,就根据wherecolumnlike'%'+value+'%'去读取是否有指定的指,读取到之后selecttablename出来.

执行7楼代码加Execproc_GetTableName'Name','Zs'吗?

恩,直接proc_GetTableName'Name','Zs'也可以.
解决方案十四:
引用12楼BitCoffee的回复:

恩,直接proc_GetTableName'Name','Zs'也可以.

把代码都放在sql语句里了,可是在测试中dt里还是没数据,在SQLServer查询里,执行结果是“命令已成功完成”
解决方案十五:
别搞那么复杂,直接用下面的,有多少表写多少selectname,'table1'fromtable1wherename=‘Zs’unionallselectname,'table2'fromtable2wherename=‘Zs’unionallselectname,'table3'fromtable3wherename=‘Zs’

解决方案:
1、获取所有数据库名SelectNameFromMaster..SysDatabasesorderByName2、获取所有表名SelectNameFromSysObjectsWhereXType='U'orderByNameXType='U':表示所有用户表;XType='S':表示所有系统表;3、.获取所有字段名SelectNameFromSysColumnsWhereid=Object_Id(‘TableName’)对所有表名的集合中,含有指定字段名的表做查询直到找到你需要的表,或失败你连过程化的查询都不清楚,就去套用不一定正确的存储过程,成功率是极低的
解决方案:
引用14楼xdashewan的回复:

别搞那么复杂,直接用下面的,有多少表写多少selectname,'table1'fromtable1wherename=‘Zs’unionallselectname,'table2'fromtable2wherename=‘Zs’unionallselectname,'table3'fromtable3wherename=‘Zs’

额,数据库的表是动态生成的,有n个
解决方案:
引用15楼xuzuning的回复:

1、获取所有数据库名SelectNameFromMaster..SysDatabasesorderByName2、获取所有表名SelectNameFromSysObjectsWhereXType='U'orderByNameXType='U':表示所有用户表;XType='S':表示所有系统表;3、.获取所有字段名SelectNameFromSysColumnsWhereid=Object_Id(‘TableName’)对所有表名的集合中,含有指定字段名的表做查询直到找到你需要的表,或失败你连过程化的查询都不清楚,就去套用不一定正确的存储过程,成功率是极低的

菜鸟一只,之前数据库只接触过最简单的增删改查。
解决方案:
所以你需要先搞清原理,在动手
解决方案:
引用16楼weiyf27的回复:

额,数据库的表是动态生成的,有n个

表都能动态生成,语句不能动态生成?再不济,你多生成一张表用于记录表名也能办到
解决方案:
谢谢各位大神的热心解答,我再花时间多学习下,试试大神们的方法

时间: 2024-10-22 17:24:15

知道字段名,如何根据该字段的值查找到表名的相关文章

ajax-请问一下我想在一个select框选定表名,在下一个select框中显示这个表名的字段如何实现

问题描述 请问一下我想在一个select框选定表名,在下一个select框中显示这个表名的字段如何实现 <%@page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@page import="java.sql.*"%> <html> <head> <title>图书管理系统</tit

mybatis动态insert-mybatis 动态insert 传入表名、字段名、数据

问题描述 mybatis 动态insert 传入表名.字段名.数据 需求: 输入:1000个不同的csv文件,每个csv文件10000条记录: 输出:将这些文件存储到每个csv文件对应的数据库中的表中: 求动态sql的书写???: 注:csv文件的第一行和数据库中的字段名一致 解决方案 mybatis 传入动态表名MyBatis动态传入表名,字段名参数的解决办法MyBatis,动态传入表名,字段名的解决办法 解决方案二: insert into #{表名} (#{字段1},#{字段2}) val

sql判断表名与字段名是否存在语句

1.字段是否存在  代码如下 复制代码 if((select count(*) from syscolumns where name = '字段名' and id=(select id from sysobjects where name='表名'))=0) begin end   2.表是否存在  代码如下 复制代码 if exists (select * from sysobjects where id = OBJECT_ID('表名') and OBJECTPROPERTY(id, 'Is

mysql-MYSQL如何进行多字段同时筛选,获取不同的值

问题描述 MYSQL如何进行多字段同时筛选,获取不同的值 有一个表,数据是这样的 品名 规格 材质 厂家 价格 城市 添加日期 螺纹钢 Φ12-14 HRB400E 成实 2370 北京 2015-11-6 10:33 螺纹钢 Φ12-14 HRB400E 龙钢 2370 北京 2015-11-6 10:33 螺纹钢 Φ12-14 HRB400E 德胜 2370 北京 2015-11-6 10:33 螺纹钢 Φ12-14 HRB400E 威钢 2440 北京 2015-11-6 10:33 螺纹

access-与数据库连接ACCESS数据库,显示库中所有的表名,但是出现很多不知道的表名

问题描述 与数据库连接ACCESS数据库,显示库中所有的表名,但是出现很多不知道的表名 用C#语句实现在combobox显示连接的数据库的中所有表的名称,但是为什么显示像 msysnamemap之类的很多不知道的表名,请问怎么解决. 解决方案 很正常,这些都是系统表名,你取出来以后判断下 if (!表名.Contains("msysname")) ComboBox1.Add(表名) 解决方案二: 如何得到一个ACCESS数据库的所有表名

mysql在windows下支持表名大小写,lower_case_table_names

原文:mysql在windows下支持表名大小写,lower_case_table_names windows下mysql默认是不支表名大小写的,也就是表名大小写不敏感. 用phpmyadmin创建的驼峰式表名,全部被强制成小写. mysql表名大小写敏感的参数:lower_case_table_names.   Windows2012 下的C:\ProgramData\MySQL\MySQL Server 5.6\my.ini 文件 在[mysqld]下加上lower_case_table_n

ASP常见的保留字整理(变量与表名注意不能用)_ASP基础

许多人在编写程序的时候因为贪图方便或不小心使用到程式的保留字,有时明明程序没有错,就是无法正确执行.您知道有哪些常见的保留字吗?  下面的都是编程程序与表名都不能使用,如果不小心使用了,就需要下面的方法解决下当用USER作为数据库表名时,出错的解决办法 1.因为User是关键字,所以更改表名即可解决. 2.如果不想更改表名,那么我们在操作此表时,不能用User,而应该用[User],例如: SELECT UserName FROM [User] WHERE UserId = 1 INSERT I

SQL Server数字开头的数据库表名的解决方法_MsSql

今天遇到了个郁闷的问题,关于数据库表名的问题.     SQL Server的数据库的表名可以用数字开头,但是在查询的时候,不能直接写表名,如下:         select *         form 1_tablename     在执行过程中,报错.但是给表名加上中括号,就可以了,如下:         select *         from [1_tablename]     用VS中的DataSet开发时,会自动生成SQL语句,但是生成的SQL语句中,有的加上方括号,但是有的没

ASP常见的保留字整理(变量与表名注意不能用)

许多人在编写程序的时候因为贪图方便或不小心使用到程式的保留字,有时明明程序没有错,就是无法正确执行.您知道有哪些常见的保留字吗? 下面的都是编程程序与表名都不能使用,如果不小心使用了,就需要下面的方法解决下 当用USER作为数据库表名时,出错的解决办法 1.因为User是关键字,所以更改表名即可解决. 2.如果不想更改表名,那么我们在操作此表时,不能用User,而应该用[User],例如: SELECT UserName FROM [User] WHERE UserId = 1 INSERT I