2014-01-06 3 views
0

Я построил свою sql statemnet, как показано ниже, но я получаю ошибку при попытке скомпилировать. Я знаю, что мы можем построить его динамически в строке, но, как знать, можем ли мы написать оператор таким образом. пожалуйста, ищите предложения.SQL Server хранимой процедуры инструкция SELECT с несколькими инструкциями IF

INSERT INTO #tmpHierarchy ( 
JID , 
EntryDate , 
RefundDate , 
ActionBy , 
Comments , 
CID, 
nLevel 
)  
SELECT 
    JID, EntryDate, RefundDate, ActionBy, Comments, CID, nLevel 
FROM 
    Hierarchy 
WHERE 1=1 
    AND 
IF @FromDate <> '' AND @ToDate <> '' 
BEGIN 
    Convert(varchar,EntryDate,112)>= @FromDate AND Convert(varchar,EntryDate,112) <= @ToDate 
END 

IF @ActionBy <> '' 
BEGIN 
    [email protected] 
END 

IF @JID > 0 
BEGIN 
    [email protected] 
END 

ответ

0

Вы на самом деле нужно построить VARCHAR с запросом, а затем выполнить его:

declare @sql varchar(max) 

set @sql = 'INSERT INTO #tmpHierarchy ( 
JID , 
EntryDate , 
RefundDate , 
ActionBy , 
Comments , 
CID, 
nLevel 
)  
SELECT JID,EntryDate,RefundDate,ActionBy,Comments,CID,nLevel FROM Hierarchy WHERE 1=1' 

IF @FromDate <> '' AND @ToDate <> '' 
BEGIN 
    @sql = @sql + ' and Convert(varchar,EntryDate,112)>= @FromDate AND Convert(varchar,EntryDate,112) <= @ToDate' 
END 

IF @ActionBy <> '' 
BEGIN 
    @sql = @sql + ' and [email protected]' 
END 

IF @JID > 0 
BEGIN 
    @sql = @sql + ' and [email protected]' 
END 

exec (@sql) 
+0

без создания динамического sql мы не можем это сделать ?? – Thomas

+0

Это может быть очень интересно сделать из-за ваших функций преобразования - вы не хотите, чтобы это выполнялось, если ваше значение недействительно. – Szymon

0

Вы можете сделать что-то вроде этого, где вы объедините IF заявления в WHERE п

SELECT JID, EntryDate, RefundDate, ActionBy, Comments, CID, nLevel 
FROM Hierarchy 
WHERE 1 = 1 
AND (@FromDate = '' OR @ToDate = '' OR (Convert(varchar, EntryDate, 112) >= @FromDate AND Convert(varchar, EntryDate, 112) <= @ToDate)) 
AND (@ActionBy = '' OR ActionBy = @ActionBy) 
AND (@JID <= 0 OR JID = @JID) 
Смежные вопросы