Попытка использовать переменную как предложение where - PullRequest
0 голосов
/ 24 июня 2019

У меня есть ситуация, когда у меня может быть дата для поиска, а у меня нет. У меня есть переменная, которая создает предложение where: где field1 = date, если есть дата, в противном случае я создаю пустой varable. проблема заключается в добавлении этого в конец моего SQL-оператора.

Select * from table + @where 
Select @ from table & @where

не работает

msg 102, Уровень 15, Состояние 1, Строка 65 Неверный синтаксис рядом с '+'

Ответы [ 2 ]

1 голос
/ 24 июня 2019

Лучшей практикой будет процедура с кодом, которая позволяет иметь аргумент NULL. Динамический SQL может быть внедрен, если он выполняется плохо, или его сложно поддерживать, если у вас есть условные ветви для добавления дополнительных объединений, предложений в WHERE и т. Д.

CREATE PROCEDURE your_proc 
@search_date DATETIME

AS

BEGIN 

SELECT * 
FROM your_table
WHERE your_date_col >= ISNULL(@search_date, '9999-12-31')
END
GO 

Теперь, если у вас есть переменная, вы можете вызвать вашу процедуру с ней:

DECLARE @variable DATETIME = '2018-01-01'
EXEC your_proc @variable

Или вы можете оставить его NULL и запустить тот же код:

EXEC your_proc NULL
0 голосов
/ 24 июня 2019

вы можете изменить предложение where, чтобы оно использовало переменную только тогда, когда оно не пустое, как это например

declare @SearchValue date = null -- set a date here if you want to use this variable in the where clause

select t.* 
from   YourTable t
where  (@SearchValue is null or t.YourDateColumn = @SearchValue)

если переменная @SearchValue пуста, проверка не будет выполняться, поскольку выражение в скобках уже будет true

Таким образом, вы можете избежать использования динамического sql

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