我有一个表有3个不同的选择查询。
e.g。
Staff
------------------------------------------------------------
ID Code Name Phone DOB Email Addr1 Addr2 Addr3
Query1
Select ID, Code, Phone From Staff Where Code = 'ABC'
Query2
Select ID, Code, Phone From Staff Where Name = 'ABCXYZ' And Code = 'B'
Query3
Select ID, Code, Phone From Staff Where Phone= '1234' And Email = 'a@b'
这3个查询存在于3个不同的存储过程中。
我想找到我在所有Where子句中使用的属性的名称。但是想要自动化,因为我有超过100个表要查找
像这样的东西
exec fxGetWhereColList ('Staff');
Code
Name
Phone
Email
答案 0 :(得分:0)
就像Lamak所说,这样做几乎是不可能的,至少在SQL中是这样。
要正确执行此操作,您应该对正在使用的SQL变体使用SQL Parser。 SQL解析器将标识语句中引用的对象以及where子句的元素。
但是如果您知道查询很简单并且看起来与您列出的查询类似,那么您可以使用一些简单的查询来分离语句。我为一个声明做了一个例子:
declare
@foo nvarchar(max)=N'Select ID, Code, Phone From Staff Where Phone= ''1234'' And Email = ''a@b'' '
, @From nvarchar(max)=' From '
, @Table nvarchar(max)
declare @a int
-- find FROM
set @a= PATINDEX('%'+@From+'%',@foo)
-- Find statement to the right of from
set @foo=ltrim(RIGHT(@foo,len(@foo)-(@a)))
-- Find first space
set @a=CHARINDEX(' ',@foo)
-- find first word, we assume it is the table name
set @Table=ltrim(rtrim(LEFT(@foo,@a)))
-- Find WHERE statement
set @foo=ltrim(rtrim(replace(right(@foo,len(@foo)-@a),'Where','')))
-- Now find matching columns in table, I am using SQL Server so I look up column names in information_schema.columns
select @Table,column_name
from INFORMATION_SCHEMA.COLUMNS
--from (values ('ID'),('Code'),('Name'),('Phone'),('DOB'),('Email'),('Addr1'),('Addr2'),('Addr3'))cols(column_name)
where TABLE_NAME=@table
and @foo like '%'+column_name+'%'
这个解决方案只适用于一些简单的语句,它假定了很多东西。
答案 1 :(得分:0)