如何使用变量作为表名来检查表的存在

时间:2012-09-17 10:25:50

标签: sql sql-server sql-server-2008 tsql

a)检查表以查找需要创建的其他表的名称 b)检查该表是否已存在 c)如果没有,创建它 d)用新数据填写她

现在,这一切都适用于必须检查表是否存在的部分:

set @NewTablename = (select NAME from SomeTable where ID= @i)
set @Tabelexists = 'select case when exists(select * from sys.tables where name = ''' + @NewTabelname + ''') then 1 else 0 end'

declare @check as int execute(@Tabelexists)

IF    @check is NULL 
BEGIN
Create Table
END
ELSE
BEGIN
execute('Delete from '+ @NewTableName)
END

<other stuff like inserts and so on)

但不知何故,@ check在表不存在时似乎总是为NULL,如果表存在则为1。

如果我检查IF @check is null,则仅当表不存在时才执行TRUE部分。如果当时 存在没有执行 .....

如果我检查IF @check =1只执行ELSE

@check的值显然总是NULL或1或0 ..........

我在这里不知所措! 如何使用变量作为表名来检查表的存在?

达米恩,我明白你在说什么。但如果我这样做,我仍然没有结果,我可以测试:

declare @check as int execute ('select case when exists(select * from sys.tables where name = ''' + @Tabelnaam + ''') then 1 else 0 end')

3 个答案:

答案 0 :(得分:3)

你可以这样检查

if not exists(select * from sys.tables where  type='u' and name = @NewTabelname ) 
BEGIN
Create Table
END
ELSE
BEGIN
execute('Delete from '+ @NewTableName)
END

答案 1 :(得分:1)

declare @check as tinyint

set @NewTablename = (select NAME from SomeTable where ID= @i)
select @check=1 from sys.tables where name = @NewTabelname

set @NewTablename = (select NAME from SomeTable where ID= @i)
IF  not exists(select * from sys.tables where name = @NewTabelname)    
...

答案 2 :(得分:1)

当检查sys表中是否存在某些内容时,我总是倾向于选择一个count(*),答案总是为0或者为正,然后我会相应地使用该数字。

SELECT @Tabelexists = count(*) FROM sys.tables where name = ''' + @NewTabelname +''')