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

标签 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>是变量,所以不可能使用 information_schemasys表/ View 。所以应该是这样的

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'

最佳答案

试试这个..

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'

关于sql - 是否可以动态检查该列是否存在于另一个数据库的表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29696598/

相关文章:

sql - python 中 cx_Oracle 在一个事务中包含许多 SQL DML 语句

SQL Server 在新表中使用透视/逆透视

sql - 交叉应用表值函数

c# - 为什么调用 DatabaseInstance.ExecuteSprocAccessor<T>(...) 对于这样一个简单的查询要花这么长时间?

sql - 如何从临时表选择中删除第一列

php - 在 php 中选择 mysql 错误,但在 mysql 中工作正常

javascript - 在 Safari (WebKit) Web Sql 数据库中同步executeSql

php - 检查前一个 MySQL 查询的状态并执行下一个查询

sql - 使用 MS SQL Server 根据项目顺序和父类别顺序对项目进行排序

ruby-on-rails - RoR 中驱动程序和应用程序之间的体系结构不匹配