我遇到了这个问题,今天创建了一些存储过程。它开始于我收到一个列没有存在的消息。这并非与众不同 - 我们拥有数百个数据库,因此有时会丢失一些东西。
然而,当我试图将列添加到缺少它们的表时,事情变得奇怪。
查看这两个代码示例:
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表缺少电子邮件列,但当我尝试在该列上选择时,我收到此错误。
可能会发生什么?
答案 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)
这最终导致了一些数据库损坏。如果您最终遇到了同样的问题,则需要采取措施对硬件或软件进行故障排除并解决损坏问题。