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

何かの存在についてsysテーブルをチェックするとき、私は常にcount(*)を選択する傾向があり、答えは常に0または正であり、それに応じてその数を使用します。

SELECT @Tabelexists = count(*) FROM sys.tables where name = ''' + @NewTabelname +''')
于 2012-09-17T10:45:19.487 に答える
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 に答える