友善的穿山甲兄弟 2023-08-07 15:02 采纳率: 77.8%
浏览 4
已结题

SQL Server使用IF EXISTS排除不存在的表和字段后仍然提示不存在表和字段。

问题:我都已经用“IF EXISTS(SELECT TOP 1 1 FROM dbo.SYSCOLUMNS WHERE id=OBJECT_ID('PRJ_ORG_INFO') AND name='EADDRESS')”判断了PRJ_ORG_INFO表EADDRESS字段是否存在,为什么还是报错了。

我需要的解决方案:能够顺利执行下去。

  1. 先查询各表各字段存在的状态
SELECT TOP 1 1 FROM dbo.SYSCOLUMNS WHERE id=OBJECT_ID('PERSON_ORG_INFO');
SELECT TOP 1 2 FROM dbo.SYSCOLUMNS WHERE id=OBJECT_ID('PERSON_ORG_INFO') AND name='EADDRESS';
SELECT TOP 1 3 FROM dbo.SYSCOLUMNS WHERE id=OBJECT_ID('PRJ_ORG_INFO');
SELECT TOP 1 4 FROM dbo.SYSCOLUMNS WHERE id=OBJECT_ID('PRJ_ORG_INFO') AND name='EADDRESS';

img

  1. 操作一个表和字段都不存在的数据
IF EXISTS(SELECT TOP 1 1 FROM dbo.SYSCOLUMNS WHERE id=OBJECT_ID('PERSON_ORG_INFO') AND name='EADDRESS')
BEGIN
    UPDATE dbo.[PERSON_ORG_INFO] SET [EADDRESS] = '123' WHERE [EADDRESS] IS NOT NULL AND [EADDRESS] != '';
END

img

  1. 操作一个表存在字段不存在的数据
IF EXISTS(SELECT TOP 1 1 FROM dbo.SYSCOLUMNS WHERE id=OBJECT_ID('PRJ_ORG_INFO') AND name='EADDRESS') 
BEGIN 
    UPDATE dbo.[PRJ_ORG_INFO] SET [EADDRESS] = '123' WHERE [EADDRESS] IS NOT NULL AND [EADDRESS] != ''; 
END

img

  1. 操作一个表不存在字段不存在的数据
IF EXISTS(SELECT TOP 1 1 FROM dbo.SYSCOLUMNS WHERE id=OBJECT_ID('PRJ_ORG_INFO123456') AND name='EADDRESS') 
BEGIN 
    UPDATE dbo.[PRJ_ORG_INFO123456] SET [EADDRESS] = '123' WHERE [EADDRESS] IS NOT NULL AND [EADDRESS] != ''; 
END

img

  • 写回答

1条回答 默认 最新

  • 友善的穿山甲兄弟 2023-08-08 14:17
    关注

    这是预编译报的错误,使用动态SQL包裹起来。

    EXEC sys.sp_executesql N'SQL';

    EXEC sys.sp_executesql N'UPDATE dbo.[PERSON_ORG_INFO] SET [EADDRESS] = '123' WHERE [EADDRESS] IS NOT NULL AND [EADDRESS] != '';';

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月16日
  • 已采纳回答 8月8日
  • 创建了问题 8月7日

悬赏问题

  • ¥15 matlab有关债券凸性久期的代码
  • ¥15 lvgl v8.2定时器提前到来
  • ¥15 qtcp 发送数据时偶尔会遇到发送数据失败?用的MSVC编译器(标签-qt|关键词-tcp)
  • ¥15 cam_lidar_calibration报错
  • ¥15 拓扑学,凸集,紧集。。
  • ¥15 如何扩大AIS数据容量
  • ¥15 单纯型python实现编译报错
  • ¥15 c++2013读写oracle
  • ¥15 c++ gmssl sm2验签demo
  • ¥15 关于模的完全剩余系(关键词-数学方法)