如何優化下面的SQL查詢,任何方式來取代動態查詢到?...感謝如何替代動態查詢?
DECLARE @NUM INT,
@NAME VARCHAR(20),
@SQL VARCHAR(MAX)
SET @SQL='SELECT * FROM EMPLOYEE A'
IF(@NUM<>0)
BEGIN
SET @[email protected]+'JOIN DEPARTMENT B ON A.N_ID=B.N_ID'
END
IF @NAME IS NOT NULL
BEGIN
SET @[email protected]+'WHERE ENAME like '''+'%'[email protected]+'%'+''''
END EXEC(@SQL)
感謝pacreely,如果我已經通過參數(@QRY)傳遞查詢字符串,那麼如何實現? 'DECLARE @NUM INT, \t \t @NAME VARCHAR(20), @QRY VARCHAR(MAX)= 'AND DEPT IN(5,6)' \t \t @SQL VARCHAR(MAX) \t \t SET @SQL = 'SELECT * FROM EMPLOYEE A' \t IF(@NUM <> 0) \t BEGIN \t SET @ SQL = @ SQL + 'JOIN部門B ON A.N_ID = B.N_ID' \t END \t IF @NAME IS NOT NULL \t BEGIN \t SET @ SQL = @ SQ L + 'WHERE ENAME像 ''' + '%' + @ NAME + '%' + '' '' \t END IF @QRY IS NOT NULL BEGIN SET @ SQL = @ SQL + @ QRY END EXEC(@SQL )' –
@QRY代表了一段SQL代碼,而不是離散值,包含它的唯一方法是使用動態SQL。您有一個選項是將值5和6加載到另一個表中,然後對該表執行Inner Join。 – pacreely
非常感謝,@ QRY只是最終用戶的一個參數,他們會像部門一樣給出任何一段SQL代碼。 –