您的查询无法执行COMPILE,因为编译器会检查各个表中是否存在要选择的列-因此IF语句永远不会执行。
它可以在单独的存储过程中工作,因为它们是在运行时按需编译的,因此只有“工作”的存储过程才可以编译。
要解决此问题,请使用动态SQL
DECLARE @SQLString varchar(max) IF EXISTS (SELECt idenfier FROM TableA WHERe identifier='12345') BEGIN SET @SQLString = 'SELECt ColumnWhichonlyExistsInA FROM TableA WHERe identifier=''12345''' END ELSE BEGIN SET @SQLString = 'SELECt ColumnWhichonlyExistsInA FROM TableB WHERe identifier=''12345''' END EXECUTE sp_executesql @SQLString



