是否可以通过使用引用变量来搜索多个表中的多个列?

时间:2017-07-13 16:04:45

标签: sql ssms

我正在使用搜索算法在我的数据库中查找符合特定条件的表。输出如下:

TableName     |     ColumnName
--------------+---------------
Table1        |     Column1
Table1        |     Column2
Table1        |     Column3
Table2        |     Column4
Table2        |     Column1
...           |     ...
Table652      |     Column873

然后我尝试将该表用作我尝试使用的另一个查询的输入:

WHERE Tablename.ColumnName LIKE 'Post 2013 - %'

或者

WHERE ((TableName).(ColumnName)) LIKE 'Post 2013 - %'

或者

SELECT ...
CONCAT(TableName, '.', ColumnName) AS TabCol
FROM search
WHERE TabCol LIKE 'Post 2013 - %'

问题是我的代码在每个WHERE语句中都返回错误。我是否可以使用第一个输出作为扫描这些表中特定值的方法,返回TableName和ColumnName找到值的位置?

2 个答案:

答案 0 :(得分:0)

要做类似的事情,我发现通常有两种方法可以正常工作。一种是将整个数据库提取到文本文件,并使用文本搜索工具查找所搜索的数据。

另一种是使用系统表来识别所有表格/字段。然后在运行查询的那些字段中循环一些代码。您可能希望首先检查数据类型以消除日期,数字或整数数据类型之类的内容。或者您可以手动执行此操作。但实际上并没有像标准的Sql方法那样。

答案 1 :(得分:0)

如果您使用SQL Server作为数据库: - 您可以使用动态查询。

您可以编写一个存储过程或函数,其逻辑类似于屏幕截图中返回所需结果的表数据。您可以传递Tablename,Columnname,Conditions作为参数。假设您拥有表格中的所有数据。

enter image description here

以下是我尝试使用上述方案的示例查询。

select * from search;
select * from table2;
Declare @sql varchar(max)
select  @sql='select * from '+ tablename+' where '+columname+'='+'''john-her'''
 from search  where tablename='table2' and columname='namedata2'
select @sql
exec(@sql)

我刚试过样品......可能有多种情况有条件。希望这可以帮助您了解如何解决您的问题!!