列名无效,即使我只选择该列是否为空?

时间:2017-09-01 16:10:31

标签: sql

我遇到了这个问题,今天创建了一些存储过程。它开始于我收到一个列没有存在的消息。这并非与众不同 - 我们拥有数百个数据库,因此有时会丢失一些东西。

然而,当我试图将列添加到缺少它们的表时,事情变得奇怪。

查看这两个代码示例:

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'MNTSetup') 
BEGIN
    IF COL_LENGTH('dbo.MNTSetup','VehicleChecklistEMail') is not null
    BEGIN
       select VehicleChecklistEMail from dbo.MNTSetup
    END
END

这个错误了。但是,如果我尝试运行这个:

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'MNTSetup') 
BEGIN
    IF COL_LENGTH('dbo.MNTSetup','VehicleChecklistEMail') is null
    BEGIN
       --i put code to show the db name here
    END
END

这表明没有结果!

所以我的SQL基本上告诉我没有现有的MNTSetup表缺少电子邮件列,但当我尝试在该列上选择时,我收到此错误。

可能会发生什么?

3 个答案:

答案 0 :(得分:0)

您是否在第一次查询中忘记了表名。另外,使用foreach

代替SELECT * FROM存在
SELECT 1 FROM

答案 1 :(得分:0)

检查此查询,如果没有结果,请更改您的架构名称' dbo'到表的模式。我怀疑架构不是'dbo'。

IF EXISTS (SELECT 1 
             FROM INFORMATION_SCHEMA.TABLES 
            WHERE TABLE_NAME = 'MNTSetup'
              AND TABLE_SCHEMA = 'dbo') 
BEGIN
    IF COL_LENGTH('dbo.MNTSetup','VehicleChecklistEMail') IS NOT NULL
    BEGIN
       SELECT VehicleChecklistEMail 
         FROM dbo.MNTSetup
    END
END

答案 2 :(得分:0)

这最终导致了一些数据库损坏。如果您最终遇到了同样的问题,则需要采取措施对硬件或软件进行故障排除并解决损坏问题。