sql 检查表是否有某个字段,然后根据检查结果继续执行查询

Jenf_Mu 2018-03-23 10:53:11
declare @StatusExist bit
IF COL_LENGTH('Appointment', 'Status') IS NOT NULL
select @StatusExist = 1
ELSE
select @StatusExist = 0

select ID,
case when @StatusExist = 0 then NULL
else Status end
as Status
from Appointment

虽然上面可以检查出有没有Status列,但是下面执行的时候在没有Status列的情况下,还是会检查这列,导致SQL错误。
...全文
1221 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
繁花尽流年 2018-03-23
  • 打赏
  • 举报
回复
declare @StatusExist bit IF COL_LENGTH('Appointment', 'Status') IS NOT NULL select ID,Status from Appointment ELSE select ID, NULL as Status from Appointment
中国风 2018-03-23
  • 打赏
  • 举报
回复
只能用动态SQL,参照 e.g.
declare @StatusExist BIT,@Sql VARCHAR(max)
IF COL_LENGTH('Appointment', 'Status') IS NOT NULL
    select @StatusExist = 1  
ELSE  
    select @StatusExist = 0
SET @Sql='
select ID'+
case when  @StatusExist = 1 then ',Status' ELSE '' END 
+ ' from Appointment' 

PRINT @Sql
卖水果的net 2018-03-23
  • 打赏
  • 举报
回复
或者使用动态语句 declare @sql varchar(1000) if ... set @sql = "select id, name from t " else set @sql = "select status from t "

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧