Хранимая процедура для создания SQL-запроса - SQL - PullRequest
0 голосов
/ 13 июня 2018

У меня есть две таблицы "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 выбраны Name и DOB , я хотел бы извлечь значения NOT NULL из второй таблицы.

JOINS здесь НЕ вариантПожалуйста, не предлагайте это.извините ....

На данный момент я создал хранимую процедуру, которая сохранила Name и DOB как строки из tbl1 в #temp_table.

Теперь я хочу создать какую-то хранимую процедуру, которая создаст для меня запрос, который выберет значения "NOT NULL" из tbl2.

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.

Пожалуйста, не стесняйтесь предложить другой подход, который я могу использовать для построения желаемого запроса.Спасибо за ваше время и внимание заранее.

1 Ответ

0 голосов
/ 13 июня 2018

Попробуйте немного изменить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...