2011-05-27 80 views
0

我试图从vb.net中的sys.tables中例行删除特定表。这里是代码,但它不起作用。如何在sql server中删除多个表,如%...%

Try 
    Dim MyCommand As New Odbc.OdbcCommand("", MyConnection) 
    MyCommand.CommandText = "drop from sys.tables where tabname like '% " & span & "%'" 
    Dim result As Integer = MyCommand.ExecuteNonQuery 
    MyCommand.Dispose() 
Catch ex As Exception 
End Try 

回答

1

请不要试图更改sysviews数据。他们是为了您的信息。您通过执行DDL命令来更改该数据。

在你的情况下,你需要每个表DROP TABLE tablename
可以使用sys.tables来得到一个表执行DROP的列表,但是DROP必须是单独的命令。

而且,这是很好过得惯正确的Dispose模式:

Using MyCommand As New Odbc.OdbcCommand("drop table foo;", MyConnection) 
    MyCommand.ExecuteNonQuery() 
End Using 
+0

@GSerf @gbn @Philippe好吧,我会通过他们周围改变我的代码来获取表名,然后循环,并通过一个拖放一个。谢谢。 – TroyS 2011-05-27 17:16:22

1

中循环,并明确地发出一个删除表。

您可以使用DROP TABLE调用将其批量调入单个调用。

编辑:

另外也dbo.xp_execresultset可能生成它。我不知道它是否仍然在SQL Server 2005中,说实话。这是无证的,所以YMMV

1

你应该浏览sys.tables并找到所有对应于你的搜索的表。你会那么,对于他们中的每一个,发送下面的指令:

MyCommand.commandText = "Drop Table '" & tableName & "'"