2

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')

4

3 回答 3

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
于 2012-09-17T10:33:07.623 回答
2
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)    
...
于 2012-09-17T10:37:23.760 回答
2

在检查 sys 表中是否存在某些东西时,我总是倾向于选择一个 count(*),这样答案总是 0 或肯定的,然后我相应地使用该数字。

SELECT @Tabelexists = count(*) FROM sys.tables where name = ''' + @NewTabelname +''')
于 2012-09-17T10:45:19.487 回答