Для завершения динамическое решение SQL будет иметь вид:
DECLARE @Op nvarchar(3) = N'AND';
DECLARE @SQL nvarchar(MAX);
SET @SQL = N'SELECT * FROM TblName WHERE Col1 = 1 ' + CASE WHEN @OP IN (N'AND',N'OR') THEN @OP END + N' Col2 = 3;';
EXEC sp_executesql @SQL;
CASE
, чтобы избежать внедрения, поскольку значение @Op
должно быть либо AND
, либо OR
(в противном случае значение @SQL
приведет к NULL
, и ничего не будет выполнено).
Если вам необходимо параметризовать значения Col1
и Col2
, тогда это будет:
DECLARE @OP nvarchar(3) = N'AND';
DECLARE @SQL nvarchar(MAX);
DECLARE @col1 int = 1, @col2 int =3;
SET @SQL = N'SELECT * FROM TblName WHERE Col1 = @dCol1 ' + CASE WHEN @OP IN (N'AND',N'OR') THEN @OP END + N' Col2 = @dCol2;';
EXEC sp_executesql @SQL,N'@dCol1 int, @dCol2 int', @dCol1 = @Col1, @dCol2 = @Col2;