如何优化下面的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代码。 –