我在数据库中有Employees
个表,其中列EmpID
已更改为ID
。我想在旧表和新表中使用相同的查询,并根据情况获得相同的结果。
我尝试了以下方法:
IF (COL_LENGTH('Employees', 'EmpID') IS NOT NULL)
SELECT EmpID, NAME, SEX, SALARY
FROM Employees
WHERE EmpID IS NOT NULL
ELSE
SELECT ID, NAME, SEX, SALARY
FROM Employees
WHERE ID IS NOT NULL
但是当我在新表中运行查询时,出现列名EmpID
不存在错误。任何帮助表示赞赏!
答案 0 :(得分:1)
问题在于 compile 阶段而不是 execution 阶段。最初会编译代码,并在其中验证表和列。
您的问题是该列不存在,因此您遇到了编译失败。
您可以使用动态SQL来解决此问题:
XmlWriter
答案 1 :(得分:1)
您可以使用this approach,而无需动态SQL。
SELECT ISNULL(CA.ID, CA.EmpID) AS ID,
CA.NAME,
CA.SEX,
CA.SALARY
FROM (VALUES(NULL, NULL)) V(ID, EmpID)
CROSS APPLY (SELECT ID, /*Resolved from Employees if present or "V" otherwise */
EmpID, /*Resolved from Employees if present or "V" otherwise */
NAME,
SEX,
SALARY
FROM Employees) CA
WHERE ISNULL(CA.ID, CA.EmpID) IS NOT NULL;