SQL SERVER OBJECT_ID

时间:2009-11-04 08:47:52

标签: sql-server

我想在master数据库中自己执行查询

IF OBJECT_ID(N'DB1.dbo.T_table1', N'U') IS NOT NULL 
    AND COLUMNPROPERTY(OBJECT_ID(N'db1.dbo.T_table1'), 
                       'KEY_value','AllowsNull') IS NOT NULL 
SELECT 'TRUE' AS COLUMNSTATUS 
ELSE 
SELECT 'FALSE' AS COLUMNSTATUS

但它不起作用?给我一个建议。

2 个答案:

答案 0 :(得分:1)

从master测试时,我从

获得了预期的NULL

COLUMNPROPERTY(OBJECT_ID(N'db1.dbo.T_table1 '),' KEY_value”, 'AllowsNull'),

但是当在要测试的数据库上运行它时,它会按预期返回1/0。

似乎COLUMNPROPERTY在正在执行的数据库上运行。

编辑:

从主人那里试试

DECLARE @RetVal TABLE(
        Val INT
)

INSERT INTO @RetVal (Val) EXECUTE ('USE DB1; SELECT COLUMNPROPERTY(OBJECT_ID(N''DB1.dbo.T_table1''),''Key_Value'',''AllowsNull'')')

SELECT TOP 1 * FROM @RetVal

答案 1 :(得分:0)

您正在检查NULL,但如果该字段存在,COLUMPROPERTY将返回1或0。

尝试:

SELECT CASE COLUMNPROPERTY(OBJECT_ID(N'db1.dbo.T_table1'),
           'KEY_value','AllowsNull') 
        WHEN 0 THEN 'Column exists and does not allow nulls'
        WHEN 1 THEN 'Column exists and allows nulls'
        ELSE 'Column not found'
    END