2016-07-15 52 views
0

我有MSSQL中的兩個表。 Table2有像Tcode(varchar)('1,2,3'),CCode(varchar)像('45,2,35'),visitdate(datetime)那樣的列。 visitdate在兩者中都很常見。打印'和'在哪裏條件SQL服務器

表1具有varchar逗號代碼。

表2的列類型爲Int/SmallInt。 從table1我已聲明所需的變量。

這裏的腳本:

declare @condition varchar(10)-- returns ('1,2,3') 
declare @cdatetime datetime 
declare @Ccodes varchar(500) 
declare @Tcodes varchar(500)-- returns ('1,2,3') 
---------------------------------------------- 
Here @condition returns 'And' or 'Or' strings 
-------------------------------------------------- 
Table1: 
select @cdatetime=Startdatetime,@Ccodes= Ccode, @condition=condition,@Tcodes=Tcode 
from Table1 

Table2: 
select sum(rate) from table2 where visitdate>[email protected] 
and Tcode in (@TCodes) 'PRINT @condition' Ccode in (@Ccodes)) 

這裏基於@condition可變我有打印的邏輯運算符。

有沒有辦法在SQL中打印關鍵字。我是使用Visual Studio BI集成服務(T-sql查詢窗口)。

謝謝。

回答

2

您既可以使用動態SQL來構建一個字符串,並呼籲:

EXECUTE sp_executesql

或者只是估定參數:

SELECT SUM(rate) 
FROM table2 
WHERE visitdate >= @cdatetime 
     AND ((Tcode IN (@TCodes) 
       AND @condition = 'AND' 
       AND Ccode IN (@Ccodes) 
      ) 
       OR ((Tcode IN (@TCodes) 
        AND @condition = 'OR' 
        OR Ccode IN (@Ccodes) 
        ) 
       ) 
      ) 

這是未經測試,但只是在where子句具有處理ANDOR的每個選項的條件。

+0

我一次只需要一個條件。當我使用「AND」和「OR」時,查詢值會發生變化。檢查兩者的條件將是一個性能問題。它是一張巨大的桌子。 –

+0

@InayathullahKhan SQL服務器將在運行查詢之前評估條件,並僅使用where子句有效的部分。所以它會看到'@condition ='AND'',並使用WHERE子句的那部分,因爲它知道另一方會評估爲FALSE。它不應該影響我的表現,但是你最好測試它。 – Tanner