как установить предложение where с переменной в динамическом sql - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь сделать ниже условие where более гибким, т.е. когда столбец FLAG из таблицы 'aa' равен 'Y', тогда условие where равно 'where 1 = 1'.Как добавить динамический SQL ниже?

DECLARE @WhereClause NVARCHAR(300) = N' WHERE aa.pt <> ''Ins'' ';


SET @Sql = 
'insert into '+ @DbName  
+ ' ([TimeStamp], RECORD_ID, CREATED) 
'+ 'select 
        GetDate()
        , aa.RECORD_ID
        , aa.CREATED
    from #TempAudit aa 
    LEFT JOIN [' + @tableName + '] bb on aa.RECORD_ID = bb.ROW_ID 
    ' + @WhereClause

Чтобы пояснить это далее, я хочу достичь, когда aa.FLAG = Y, тогда мне не нужно условие 'aa.pt <> «Ins» больше.Это что-то вроде ниже, но я думаю, что формат не будет работать.

DECLARE @WhereClause NVARCHAR(300) = N' WHERE aa.pt <> ''Ins'' ';
 DECLARE @WhereClause2 NVARCHAR(300) = N' WHERE 1=1';
SET @Sql = 
'insert into '+ @DbName  
+ ' ([TimeStamp], RECORD_ID, CREATED) 
'+ 'select 
        GetDate()
        , aa.RECORD_ID
        , aa.CREATED
    from #TempAudit aa 
    LEFT JOIN [' + @tableName + '] bb on aa.RECORD_ID = bb.ROW_ID 
    ' + 'case when aa.FLAG = ''Y'' then @WhereClause2  else @WhereClause'

1 Ответ

0 голосов
/ 29 декабря 2018

Чтобы уточнить мой комментарий, который вы не поняли, как кажется:

Если у вас есть выражение, которое выглядит как A OR B, это выражение будет истинным, если (1) AЗначение true, а B - значение false, если (2) A - значение false, а B - значение true или (3) A - значение true, а B - значение true.Это только ложь, когда (4) оба, A и B являются ложными.

Следовательно, вы можете написать свое предложение WHERE как:

WHERE aa.pt <> 'Ins' OR aa.flag = 'Y'

ПустьA be aa.pt <> 'Ins' и B be aa.flag = 'Y' здесь.Если aa.flag = 'Y' верно, то применяются условия 2 (или) и условие истинно независимо от aa.pt <> 'Ins'.Если aa.flag = 'Y' равно false, условие истинно тогда и только тогда, когда aa.pt <> 'Ins' верно, из-за случая (1).В противном случае применяется случай (4), а условие ложно.

Это именно та логика, которой вы хотите достичь.Здесь просто не используется динамическая акробатика SQL (которая, скорее всего, не будет работать в любом случае, так как вы не знаете значений при построении строки и, следовательно, не можете решить, какое предложение поместить туда).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...