问题:我都已经用“IF EXISTS(SELECT TOP 1 1 FROM dbo.SYSCOLUMNS WHERE id=OBJECT_ID('PRJ_ORG_INFO') AND name='EADDRESS')”判断了PRJ_ORG_INFO表EADDRESS字段是否存在,为什么还是报错了。
我需要的解决方案:能够顺利执行下去。
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';
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
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
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
这是预编译报的错误,使用动态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] != '';';