2011-08-26 58 views
1

我有一个批处理文件,它接受部分数据库名称作为参数并创建数据库。部分批处理文件如下所示:如何传递一个带有点字符的批处理文件参数?

例如,

sqlcmd -S %1 -i "createDB.sql" -v dbname = DB%2 

第二个参数应该是一个版本,它可以在一个句点,如15.3,或14.0.60但是当我通过这个版本号它不创建数据库,提高一个错误,但如果我只传递一个简单的数字,比如23,10就可以。

请问我是什么问题?

非常感谢。

+1

欢迎来到StackOverflow。为了将来的参考,“提出一个错误”,没有任何有关错误是没有用的信息。您需要提供有关错误的具体信息,包括* exact *错误消息文本。这有助于人们更快地帮助你,这对你和那些试图帮助你的人都有好处。谢谢。 :) –

+2

@Fisseha请发布确切的错误消息,你正在收到。 –

回答

0

您是否试过用引号将它包裹起来?我认为这是sqlcmd -v的正确规范。

即。

sqlcmd -S %1 -i "createDB.sql" -v dbname = "DB%2" 
+0

仍然抱怨参数的语法不正确,我传递的参数与servername \ instance 16.30相似,并且它的语法不正确.30 – asahun

+2

如果需要更多帮助,则需要发布准确的错误消息。 –

0

我应该给变量值添加引号。它将工作

sqlcmd -S %1 -i "createDB.sql" -v dbname = "DB%2" 
+0

仍然抱怨参数的语法不正确,我传递的参数就像servername \ instance 16.30,它的语法错误.30附近 – asahun

0

原来,问题不在于如何将点字符传递作为批处理文件的参数的一部分,而是如何报价,妥善包含点字符的标识符SQL,更具体地说,在Transact-SQL中。

我想你应该尝试另外,以方括号括起来的数据库的名称,如:

sqlcmd -S %1 -i "createDB.sql" -v dbname = "[DB%2]" 

或者您可能需要包括周围$dbname在SQL脚本(括号即代替把它们放在命令行上),但没有看到那个脚本,我不能肯定地说。

相关问题