2015-04-17 50 views
1

所以我在形勢時,我必須知道,如果在另一個數據庫表中存在的列。我無法切換數據庫上下文,也無法使用動態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' 

回答

0

好了,到目前爲止,我已經找到了唯一的辦法是檢查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

如果你想知道,如果列定義試試這個..

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' 
+0

喜請檢查更新的版本,我想這個問題的要點,我必須這樣做動態 –

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意味着它。

+0

喜請檢查更新的版本,我想這個問題的要點,我必須動態地做到這一點 –

相關問題