是否可以动态地检查该列是否存在于另一个数据库的表中

时间:2015-04-17 10:23:51

标签: sql sql-server sql-server-2008-r2

所以当我必须知道列是否存在于另一个数据库的表中时,我处于这种情况。我无法切换数据库上下文,我不能使用动态SQL,因为我必须在标量函数内部进行。

我该怎么做?

我可以通过检查object_id('<database name>.<schema name>.<table name>')来查找表是否存在,但我找不到检查列是否存在的方法。

似乎无法使用object_id()函数,列没有类型 - sys.objects

更新即可。我完全忘记提及<database name><schema name><table name><column name>是VARIABLES,因此无法使用information_schemasys表/视图。所以它应该是这样的

declare
    @database_name nvarchar(128),
    @schema_name nvarchar(128),
    @table_name nvarchar(128),
    @column_name nvarchar(128)

if object_id(@database_name + '.' + @schema_name + '.' + @table_name) is not null
    print 'Table exists'
else
    print 'Table does not exist'

if <??? how to check if column exists ???>
    print 'Column exists'
else
    print 'Column does not exist'

4 个答案:

答案 0 :(得分:1)

好的,我到目前为止找到的唯一方法是检查col_length()功能。它看起来像某种黑客,但它的工作始终如一,我已经检查了这与数据库集的动态SQL。

declare
    @database_name nvarchar(128),
    @schema_name nvarchar(128),
    @table_name nvarchar(128),
    @column_name nvarchar(128),
    @object_name nvarchar(max)

select @object_name = @database_name + '.' + @schema_name + '.' + @table_name

if object_id(@object_name) is not null
    print 'Table exists'
else
    print 'Table does not exist'

if col_length(@object_name, @column_name) is not null
    print 'Column exists'
else
    print 'Column does not exist'

答案 1 :(得分:1)

试试这个..

if exists(  select top 1 1
                from    Sys.tables    t
                join    Sys.columns   c
                    on  t.object_id = c.object_id
                where  t.name =  'Your_Table_name'
                    and c.name = 'Your_Column_name')
    select  'Your Cloumn Exists'
    else
    select 'Your Cloumn Does not Exist'

答案 2 :(得分:1)

如果您想知道列是否已定义,可以使用information_schema函数:

select count(*) as IsExists
from <databasename>.information_schema.columns c
where table_schema = '<schema>' and table_name = '<tablename>' and
      column_name = '<columnname>'

值为0表示该列不存在。值为1表示它确实存在。

答案 3 :(得分:0)

要检查该列是否存在于数据库的任何表中,可以使用以下脚本

-- with partial column name: 

        IF EXISTS 
        (
            SELECT * 
            FROM INFORMATION_SCHEMA.COLUMNS 
            where column_name like '%SEARCH_TEXT%'
        )
            PRINT 'Column found'
        ELSE
            PRINT 'Column not found'


    -- To search with exact text
        IF EXISTS 
        (
            SELECT * 
            FROM INFORMATION_SCHEMA.COLUMNS 
            where column_name = 'SEARCH_TEXT'
        )
            PRINT 'Column found'
        ELSE
            PRINT 'Column not found'

要查看该列的详细信息,只需在if语句中运行脚本