从批处理文件中删除SQL Server数据库中的所有表?

如何解决从批处理文件中删除SQL Server数据库中的所有表?

| 我有此批处理文件,可将所有表的列表输出文件。我正在寻找将输入此列表并生成整个drop语句列表以删除所有表的命令?
:: droptables.bat
set sqlVER=100
if NOT EXIST \"%PROGRAMFILES%\\Microsoft sql Server\\100\\Tools\\BINN\\osql.exe\" (
  @echo MS sql Server 2008 not found.
  set sqlVER=90
  if NOT EXIST \"%PROGRAMFILES%\\Microsoft sql Server\\90\\Tools\\BINN\\osql.exe\" (
    @echo MS sql Server 2005 not found.
    set sqlVER=80
    if NOT EXIST \"%PROGRAMFILES%\\Microsoft sql Server\\80\\Tools\\BINN\\osql.exe\" (
      @echo MS sql Server is not yet installed.
      pause
      exit
    )
  )
)
@echo Your sql Server version is %sqlVER% (100=2008,90=2005,and 80=2000)    
if exist \"%PROGRAMFILES%\\Microsoft sql Server\\%sqlVER%\\Tools\\BINN\\osql.exe\" (
  \"%PROGRAMFILES%\\Microsoft sql Server\\%sqlVER%\\Tools\\BINN\\osql\" -E 
  -d \"%PROJECT%PD_FSDB_ECitation\" -h-1 -Q \"select name from sysobjects where 
  type=\'U\' order by name;\" -o tableList.txt
需要更改以上查询以创建drop语句列表,而不仅仅是表名。 tableList.sql文件只是放置表语句的简单列表。 生成queryList.sql之后,我想这样运行它:
osql -E -h-1 -i C:\\MyFolder\\queryList.txt
我知道有一种从sql语句生成sql语句列表的方法,但是我不记得该怎么做。     

解决方法

我不知道是否有执行此操作的命令,但是您可以更改select语句,以便它为您创建drop语句:
select \'--DROP TABLE \' + name + CHAR(10) + \'DROP TABLE \' + name + \' GO\' from sysobjects where type=\'U\' 
编辑:关于未指定架构的注释后:
SELECT \'--DROP TABLE \' + TABLE_NAME + CHAR(10) + \'DROP TABLE \' + QUOTENAME(TABLE_SCHEMA) + \'.\' + QUOTENAME(TABLE_NAME)  
FROM INFORMATION_SCHEMA.TABLES 
编辑:正如雷木思在评论中建议的那样,添加了quotename以使其较不容易受到sql注入     ,为什么不只使用系统存储的过程
sp_msforeachtable
? 从osql运行以下命令,您可以绕开许多正在做的额外工作:
USE <databasename>
exec sp_msforeachtable \'DROP TABLE ?\'
此proc基本上会构建一个游标,并为每个表在单引号内执行一次查询,将
?
替换为模式限定的表名,例如
dbo.table
。     ,从您的SQL运行以下命令。从数据库中删除表既简单又快速:
USE <databasename>
exec sp_msforeachtable \'DROP TABLE ?\'
    ,这是我的做法:
set SQLVER=100
if NOT EXIST \"%PROGRAMFILES%\\Microsoft SQL Server\\100\\Tools\\BINN\\osql.exe\" (
  @echo MS SQL Server 2008 not found.
  set SQLVER=90
  if NOT EXIST \"%PROGRAMFILES%\\Microsoft SQL Server\\90\\Tools\\BINN\\osql.exe\" (
    @echo MS SQL Server 2005 not found.
    set SQLVER=80
    if NOT EXIST \"%PROGRAMFILES%\\Microsoft SQL Server\\80\\Tools\\BINN\\osql.exe\" (
      @echo MS SQL Server is not yet installed.
      pause
      exit
    )
  )
)
@echo Your SQL Server version is %SQLVER% (100=2008,90=2005,and 80=2000)

if exist \"%PROGRAMFILES%\\Microsoft SQL Server\\%SQLVER%\\Tools\\BINN\\osql.exe\" (
  \"%PROGRAMFILES%\\Microsoft SQL Server\\%SQLVER%\\Tools\\BINN\\osql\" -E -h-1 
 -d MYDB -Q \"select \'DROP TABLE \' + CAST(name AS 
 VARCHAR(30)) + \';\' from sysobjects where type=\'U\';\" -o queries.sql
  :: remove sql result count line
  type queries.sql | findstr /V rows > queryList.sql  
  :: rename Identity table in the sql script because it uses a keyword
  type queryList.sql | findstr /V /C:\"TABLE Identity\" > runQueries.sql
  echo DROP TABLE [Identity]; >> runQueries.sql
  \"%PROGRAMFILES%\\Microsoft SQL Server\\%SQLVER%\\Tools\\BINN\\osql\" -E -h-1 
 -d MYDB -i runQueries.sql -o dropResults1.txt
)
pause
:: Cleanup
del queryList.sql
del dropResults1.txt
del dropResults2.txt
del runQueries.sql
del queries.sql
exit
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?