来自两个表之一的SQL数据

我有两个表,其中只有一列是相同的。我正在尝试编写一个存储过程,该存储过程从传入的列名中提取一个值,但仅存在于其中一个表中。这是我写的:

IF EXISTS(

SELECT identifier FROM TableA WHERE identifier='12345')

SELECT ColumnWhichOnlyExistsInA FROM TableA WHERE identifier='12345'

ELSE

SELECT ColumnWhichOnlyExistsInA FROM TableB WHERE identifier='12345'

即使IF语句为true,也只能在TableA中提取内容,这在最后一行给了我“无效的列名”错误。我注意到,如果用执行相同操作的存储过程替换底部的两个SELECT语句,则它会起作用。SQL不会尝试执行IF为false的情况。

我想将所有内容保存在一个存储过程中。最好的方法是什么?

回答:

您的查询无法执行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

以上是 来自两个表之一的SQL数据 的全部内容, 来源链接: utcz.com/qa/412689.html

回到顶部