我有2个表“Tbl1”,其中包含3行,如下表所示
ColNames
*********
Name
SurName
DOB
我的第二个表“tbl2”包含与Name,SurName和DOB相关的信息,如下所示:
Name SurName DOB
***********************************
SAM billing 22/11/2000
NULL petres 22/11/2000
BILL Jones NULL
Dave NULL 22/11/2000
假设,如果从tbl1中选择名称和DOB ,我想从第二个表中提取NOT NULL值。
JOINS不是一个选项,所以请不要这么做。遗憾....
到目前为止我所做的是构建了一个存储过程,它将 Name和DOB 保存为tbl1中的行到#temp_table。
我现在想构建一些存储过程,为我构建一个查询,从tbl2中选择“NOT NULL”值。
ALTER PROCEDURE spShowRuleValues
AS
BEGIN
SELECT 'SELECT * FROM ' + 'tbl2' + ' WHERE '+
stuff((SELECT ', ' + Header FROM #temp_table
FOR Xml path('')
),1,2,'') + ' IS NOT NULL ';
END
execute spShowRuleValues
但是,在执行此存储过程时,我只能开发一个查询:
`SELECT * FROM tbl2 WHERE Name, DOB IS NOT NULL `
如何以构建为:
的方式构建查询SELECT * FROM tbl2 WHERE Name IS NOT NULL AND
DOB IS NOT NULL
然后执行此查询以从tbl1获取结果,不包括NOT NULL值。
请随意建议我可以用来构建所需查询的另一种方法。感谢您提前花时间考虑。
答案 0 :(得分:1)
尝试稍微更改SELECT ... FOR XML PATH
。
ALTER PROCEDURE spShowRuleValues
AS
BEGIN
DECLARE @WhereCondition VARCHAR(MAX) = STUFF(
(
SELECT 'AND T.' + QUOTENAME(Header) + ' IS NOT NULL' FROM #temp_table FOR Xml path('')
),1,4,'');
SELECT 'SELECT * FROM tbl2 AS T WHERE '+ @WhereCondition
END