2

我有一个需要使用批处理文件执行的脚本。我是否在批处理文件中使用 SQLCMD 来运行脚本?此外,该脚本将数据插入到数据库中的表中。我应该如何格式化批处理文件中的 SQLCMD,以便它知道它应该使用什么数据库?

4

3 回答 3

8

首先,将查询保存到 sql 文本文件(扩展名为 .sql 的文本文件)中。确保在开头添加 USE 语句,它告诉服务器您要使用哪个数据库。使用 MSDN 中的示例:

USE AdventureWorks2008R2;
GO
SELECT p.FirstName + ' ' + p.LastName AS 'Employee Name',
a.AddressLine1, a.AddressLine2 , a.City, a.PostalCode 
FROM Person.Person AS p 
   INNER JOIN HumanResources.Employee AS e 
        ON p.BusinessEntityID = e.BusinessEntityID
    INNER JOIN Person.BusinessEntityAddress bea 
        ON bea.BusinessEntityID = e.BusinessEntityID
    INNER JOIN Person.Address AS a 
        ON a.AddressID = bea.AddressID;
GO

然后在批处理文件中,运行 SQLCMD 并将 sql 文件(带路径)作为参数传递给它。

sqlcmd -S myServer\instanceName -i C:\myScript.sql

如果您还需要进行身份验证,则需要在 SQLCMD 命令中添加 -U 和 -P 参数。

这是一篇有关sqlcmd 实用程序的 MSDN 文章,其中包含更多详细信息。

于 2012-05-30T13:23:53.063 回答
3

使用-S开关指定服务器和实例名称,例如-S MyDbServer\Database1

SQLCMD在此处找到的文档。

于 2012-05-30T13:20:20.430 回答
1

如果要为多个数据库执行所有 .sql 文件(文件夹中的多个 sql 脚本),请创建一个批处理文件“RunScript-All.bat”,其内容如下

echo "======Start - Running scripts for master database======="
Call RunScript-master.bat
echo "=======End - Running scripts for master database=========="
pause
echo "=====Start - Running scripts for model database========"
Call RunScript-model.bat
echo "=======End - Running scripts for master database=========="
pause

特定数据库的单个批处理文件的定义,即“RunScript-master.bat”可以如下编写

for %%G in (*.sql) do sqlcmd /S .\SQL2014 /U sa /P XXXXXXXXX /d master  -i"%%G"
::pause

为不同的数据库创建许多文件并从“RunScript-All.bat”中调用它们。

现在,您可以通过单击“RunScript-All.bat”批处理文件来运行许多数据库中的所有 sql 脚本。

于 2014-12-01T10:01:50.443 回答