2012-09-17 45 views
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似乎總是空當該表不存在,如果它存在,則爲1。

如果我檢查IF @check is null只有TRUE部分執行,如果表不存在。如果確實存在在那一刻沒有執行.....

如果我檢查IF @check =1只執行

@check價值的ELSE顯然始終是NULL或1或0 ..........

我在這裏不知所措! 如何使用變量作爲表名檢查表的存在?

Damien,我明白你在說什麼。但是,如果我不喜歡這樣我仍然沒有結果,我可以測試:

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

+0

Damien,我明白你在說什麼。但是,如果我這樣做,我仍然沒有結果,我可以測試: – Henrov

回答

1

何時檢查sys表的存在的東西,我總是傾向於選擇一個計數(*)的方式答案我s總是0或正數,然後我相應地使用該數字。

SELECT @Tabelexists = count(*) FROM sys.tables where name = ''' + @NewTabelname +''') 
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
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)  
... 
+0

這就是它....................根本不需要執行語句!謝謝! – Henrov

相關問題