我正在执行SQL查询以检查天气模式 abc_hist 是否具有表 @table_name 。但是即使表存在,以下查询也无法返回任何结果,即每次条件为false时
use abc
go
----procedure---
IF EXISTS(select 1
from abc_hist..syscolumns
where status & 128 = 128
and object_name(id) = @table_name )
----procedure---
那么,问题还有其他方法可以有效地检查其他模式或我当前的sql中的表是否存在吗?
答案 0 :(得分:1)
运行此:
select
CASE WHEN status & 8> 0 THEN 'allows null' ELSE 'no nulls' end,
CASE WHEN status & 16 > 0 THEN 'check constraint exists' ELSE 'no checks' end,
CASE WHEN status & 128 > 0 THEN 'is identity' ELSE 'not identity' end,
*
from abc_hist..syscolumns
where object_name(id) = @table_name
它将在每一行中说“ not identity”,这意味着您作为参数传入的@table_name
没有Identity列,并且因为您将where子句作为条件,结果必须是一个身份列才能返回,没有结果,所以EXISTS始终为假
如果要使用此查询检查表的存在,请删除状态的WHERE子句:
IF EXISTS(select 1
from abc_hist..syscolumns
where object_name(id) = @table_name )