我的一个存储过程中有一个典型的“无效列名”,但我很难理解任何流行的解决方法如何解决我的问题:(
我的存储过程执行以下操作:
IF EXISTS (SELECT * FROM sysobjects o
JOIN syscolumns c
ON o.id = c.id
WHERE o.Name = 'Table_A'
AND c.Name = 'Column_A')
BEGIN
SELECT * FROM Table_B
JOIN Table_A
ON Table_B.Column_B = Table_A.Column_B
WHERE Table_A.Column_A = 1
FOR XML AUTO
END
ELSE
--Do something completely different
所以...我收到 Table_A.Column_A 无效的错误,但我还能如何在查询中引用它?我尝试使用动态 SQL 来创建直到“FOR XML AUTO”部分的字符串,然后使用存储过程来标记“FOR XML AUTO”部分,这可能是问题所在,但我得到了同样的错误.
为了回答我相信有些人会问的问题,查询:
SELECT * FROM sysobjects o
JOIN syscolumns c
ON o.id = c.id
WHERE o.Name = 'Table_A'
AND c.Name = 'Column_A'
当 Column_A 不在 Table_A 中时,不会产生任何结果。
并且...不,我不能更改数据库结构,它必须是这种解决方法,因为表可能包含也可能不包含此列,具体取决于数据库实例,我需要一个“包罗万象”.. .
有什么好主意吗?