2

如果表中的列可用,我想返回一个列值,如果没有,则返回一个默认值,然后在连接两个表 SHAIN1 和 RIREKI14 时遇到 COLUMN_NAME 不明确错误。如果只从一个表中选择,则查询可以正常工作,但如果我加入两个表,我会遇到问题。

declare @sql nvarchar(max) = ' SELECT 1 as id, '+ (case when exists (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA ='dbo' and TABLE_NAME='RIREKI14' and COLUMN_NAME='KOM001') then 'KOM001' else 'NULL' end) + ' as day ' + ' From RIREKI14 join SHAIN1 on RIREKI14.INCODE = SHAIN1.INCODE  '; exec sp_executesql @sql

请帮帮我!

4

1 回答 1

1

这是你的逻辑:

declare @sql nvarchar(max) = '
SELECT 1 as id, '+
    (case when exists (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA  = 'dbo' and TABLE_NAME = 'RIREKI14' and COLUMN_NAME = 'KOM001')
          then 'KOM001'
          else 'NULL'
     end) + ' as day ' + '
From RIREKI14 join
     SHAIN1
     on RIREKI14.INCODE = SHAIN1.INCODE
';

exec sp_executesql @sql;

列名不明确的唯一可能性是来自case. 所以,让我们限定它:

declare @sql nvarchar(max) = '
SELECT 1 as id, '+
    (case when exists (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA  = 'dbo' and TABLE_NAME = 'RIREKI14' and COLUMN_NAME = 'KOM001')
          then 'r.KOM001'
          else 'NULL'
     end) + ' as day ' + '
From RIREKI14 r join
     SHAIN1 s
     on r.INCODE = s.INCODE
';

exec sp_executesql @sql;
于 2018-04-19T10:46:48.907 回答