dja*_*fan 1 sql sql-server sql-server-2005
我有这个批处理文件,它将所有表的列表输出到一个文件.我正在寻找将输入此列表的命令,并生成一个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
Run Code Online (Sandbox Code Playgroud)
需要更改上述查询以创建drop语句列表而不仅仅是表名.tableList.sql文件只是一个简单的drop table语句列表.
在生成queryList.sql之后,我想像这样运行它:
osql -E -h-1 -i C:\MyFolder\queryList.txt
Run Code Online (Sandbox Code Playgroud)
我知道有一种方法可以从SQL语句生成SQL语句列表,但我不记得怎么做了.
为什么不使用只是使用系统存储过程sp_msforeachtable?
从您的osql运行以下内容,您可以绕过许多额外的工作:
USE <databasename>
exec sp_msforeachtable 'DROP TABLE ?'
Run Code Online (Sandbox Code Playgroud)
这个proc基本上构建了一个游标,并在每个表的单引号内执行一次查询,替换?为模式限定的表名,如dbo.table.
| 归档时间: |
|
| 查看次数: |
4019 次 |
| 最近记录: |