Вы не можете добавить «строку» к запросу, и она станет частью кода.Это все еще просто строка.По сути, вы пытаетесь сделать динамический SQL, но потом говорите, что вам не нужен динамический SQL?
Один из вариантов - построить логику для обоих случаев в SQL ...
SELECT *
FROM tblJobs
WHERE JobID NOT IN (63,87,469)
AND JobType LIKE '%' + @jobtype + '%'
AND (
(@inparam ='Report1')
OR
(@inparam ='Report2' AND InvoiceValue IS NOT NULL)
)
Это означает, что планировщик запросов должен постоянно справляться с обоими случаями.Один план решить оба случая.Это экономит ваш набор текста, но может означать, что вы получаете плохой план выполнения и тратите ресурсы или время выполнения.
Чтобы обойти это, вам нужно два запроса ...
IF (@inparam = 'Report1')
BEGIN
SELECT *
FROM tblJobs
WHERE JobID NOT IN (63,87,469)
AND JobType LIKE '%' + @jobtype + '%'
END
ELSE IF (@inparam = 'Report2')
BEGIN
SELECT *
FROM tblJobs
WHERE JobID NOT IN (63,87,469)
AND JobType LIKE '%' + @jobtype + '%'
AND InvoiceValue IS NOT NULL
END
Или простоиспользовать динамический SQL ...
SET @sql= 'SELECT *
FROM tblJobs
WHERE JobID NOT IN (63,87,469)
AND JobType LIKE ''%''' + @jobtype + '%''' + @v_Criteria
EXEC sp_executesql @sql
или ...
SET @sql= 'SELECT *
FROM tblJobs
WHERE JobID NOT IN (63,87,469)
AND JobType LIKE ''%'' + @jobtype_param + ''%''' + @v_Criteria
EXEC sp_executesql
@sql,
N'@jobtype_param varchar(500)',
@jobtype_param = @jobtype
(Преимущество в том, что вы не будете создавать новый план кэшированных запросов для каждого @jopbtype. Вместо этого он создает параметризованный план запроса и использует его повторно.)
РЕДАКТИРОВАТЬ:
По сути, вы исследуете динамический поиск.
Если это когда-либо становится сложнее, чем этоНапример, я настоятельно рекомендую прочитать эту статью: http://www.sommarskog.se/dyn-search.html
Это сложно и подробно, и вы выучите много ценных уроков.