admin

来自两个表之一的SQL数据

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的情况。

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


阅读 470

收藏
2021-07-01

共1个答案

admin

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