所以当我必须知道列是否存在于另一个数据库的表中时,我处于这种情况。我无法切换数据库上下文,我不能使用动态SQL,因为我必须在标量函数内部进行。
我该怎么做?
我可以通过检查object_id('<database name>.<schema name>.<table name>')
来查找表是否存在,但我找不到检查列是否存在的方法。
似乎无法使用object_id()
函数,列没有类型 - sys.objects
更新即可。我完全忘记提及<database name>
,<schema name>
,<table name>
和<column name>
是VARIABLES,因此无法使用information_schema
或sys
表/视图。所以它应该是这样的
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 :(得分: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语句中运行脚本