为什么不提示批处理文件中的输入允许DASH字符?

时间:2010-07-27 18:38:01

标签: sql-server-2005 batch-file

我有这个简单的小批处理文件程序,但是如果输入包含“ - ”字符的数据库名称,它会失败。我不确定为什么,但我希望我能找到解决方法吗?

:: open DB batch file
@echo off
:: starts Sql Server Management Studio Express 2005
:: and opens it to a specific database with query
:: window already open

cls

:SHOWDBNAMES
echo Database names detected on this system:
echo.
"%PROGRAMFILES%\Microsoft SQL Server\90\Tools\Binn\OSQL.EXE" -h-1 -S . -E -Q "SELECT CAST(name AS VARCHAR(30)) FROM sysdatabases"

@echo.
set DBNAME=
set /P DBNAME=What database name would you like to open (choose from list)? 

if "%DBNAME%" == "" (
  echo.
  echo I don't recognize your selection. Try again.
  goto SELECTDB
)

:SHOWTABLES
cls
echo.
echo Tables that you can query from %DBNAME% are:
echo.
"%PROGRAMFILES%\Microsoft SQL Server\90\Tools\Binn\OSQL.EXE" -h-1 -S . -E -Q "use [%DBNAME%];SELECT CAST(name AS VARCHAR(30)) FROM sys.Tables ORDER BY name"
echo.

:RUNIT
sqlwb.exe -nosplash -S . -E -d %DBNAME%

pause
:EOF

3 个答案:

答案 0 :(得分:2)

尝试将数据库名称括在方括号中:

[database-name]

修改

以下内容应该有效 - 您需要在调用sqlwb.exe时引用数据库名称:

:SHOWTABLES
cls
echo.
echo Tables that you can query from %DBNAME% are:
echo.
"%PROGRAMFILES%\Microsoft SQL Server\90\Tools\Binn\OSQL.EXE" -h-1 -S . -E -Q "SELECT CAST(name AS VARCHAR(30)) FROM [%DBNAME%].sys.Tables ORDER BY name"
echo.

:RUNIT
sqlwb.exe -nosplash -S . -E -d "%DBNAME%"

我不得不问 - 这个剧本有什么意义?内置的SSMS对象资源管理器可以免费为您提供所有这些信息。

此外,您的脚本不考虑默认情况下的SQL Server实例 - 默认情况下,SQL Server Express安装为<machine_name>\SQLEXPRESS

答案 1 :(得分:0)

为什么不尝试下划线(_)?

答案 2 :(得分:0)

当破折号是数据库名称中的第一个字母时,sqlwb.exe行是否失败?如果是这样,您的问题是sqlwb将数据库名称误解为命令行选项。应该有一些办法让它不这样做;查看手册。