标签: sqlcmd

当 .sql 脚本失败时,如何使 sqlcmd 返回 0 以外的 ERRORLEVEL?

我正在从一个批处理文件运行 sqlcmd,我想知道如何让它在备份出现问题时返回 0 以外的 ERRORLEVEL。

sql-server sql-server-2008-r2 sqlcmd

45
推荐指数
2
解决办法
5万
查看次数

SQLCMD 命令无法插入重音符号

我正在尝试运行sqlcmd.exe以便从命令行设置新数据库。我在 Windows 7 64 位上使用 SQL SERVER Express 2012。

这是我使用的命令:

SQLCMD -S .\MSSQLSERVER08 -V 17 -E -i %~dp0\aqualogyDB.sql -o %~dp0\databaseCreationLog.log 
Run Code Online (Sandbox Code Playgroud)

这是一段 sql 文件创建脚本:

    CREATE DATABASE aqualogy 
    COLLATE Modern_Spanish_CI_AS
    WITH TRUSTWORTHY ON, DB_CHAINING ON;
    GO
    use aqualogy
    GO
    CREATE TABLE [dbo].[BaseLayers] (
    [Code] nchar(100) NOT NULL ,
    [Geometry] nvarchar(MAX) NOT NULL ,
    [IsActive] bit NOT NULL DEFAULT ((1)) 
    )

    EXEC sp_updateextendedproperty @name = N'MS_Description', @value = N'Capas de     cartografía base de la aplicaicón. Consideramos en Galia Móvil la cartografía(...)' …
Run Code Online (Sandbox Code Playgroud)

sql-server sqlcmd sql-server-2012 encoding

21
推荐指数
2
解决办法
3万
查看次数

我可以从脚本内部启用 SQLCMD 模式吗?

是否有类似指令可以在脚本中使用以强制 SSMS 启用/禁用 SQLCMD 模式?

sql-server sqlcmd

19
推荐指数
2
解决办法
3万
查看次数

用户共享查询:动态 SQL 与 SQLCMD

我必须重构并记录一些foo.sql查询,这些查询将由一个数据库技术支持团队共享(用于客户配置等)。有些类型的票会定期出现,每个客户都有自己的服务器和数据库,但除此之外,架构是完全相同的。

存储过程目前不是一个选项。我正在争论是使用动态还是 SQLCMD,我没有使用过太多,因为我对 SQL Server 有点陌生。

SQLCMD 脚本我觉得对我来说绝对“看起来”更干净,更容易阅读并根据需要对查询进行小的更改,但也会强制用户启用 SQLCMD 模式。由于使用字符串操作编写查询而导致语法突出显示丢失,因此动态更加困难。

这些正在使用 Management Studio 2012,SQL 版本 2008R2 进行编辑和运行。这两种方法的优缺点是什么,或者一种方法或另一种方法的一些 SQL Server“最佳实践”是什么?其中一个比另一个“更安全”吗?

动态示例:

declare @ServerName varchar(50) = 'REDACTED';
declare @DatabaseName varchar(50) = 'REDACTED';
declare @OrderIdsSeparatedByCommas varchar(max) = '597336, 595764, 594594';

declare @sql_OrderCheckQuery varchar(max) = ('
use {@DatabaseName};
select 
    -- stuff
from 
    {@ServerName}.{@DatabaseName}.[dbo].[client_orders]
        as "Order"
    inner join {@ServerName}.{@DatabaseName}.[dbo].[vendor_client_orders]
        as "VendOrder" on "Order".o_id = "VendOrder".vco_oid
where "VendOrder".vco_oid in ({@OrderIdsSeparatedByCommas});
');
set @sql_OrderCheckQuery = replace( @sql_OrderCheckQuery, '{@ServerName}',   quotename(@ServerName)   );
set @sql_OrderCheckQuery = …
Run Code Online (Sandbox Code Playgroud)

sql-server scripting dynamic-sql sqlcmd

15
推荐指数
1
解决办法
1351
查看次数

在 PowerShell 中通过 SQLCMD 连接到 LocalDB

我正在尝试使用 SQLCMD 实用程序通过 PowerShell 访问我计算机上的“localdb\MSSQLLocalDB”服务器。我使用的是 PowerShell v5、.NET v5.0,服务器名称是(localdb)\MSSQLLocalDB我在 Microsoft SQL Server Management Studio 2014 中连接到它时的名称。

PS C:\> sqlcmd -S localdb\MSSQLLocalDBPS C:\> sqlcmd -S .\localdb\MSSQLLocalDB导致此错误:

Sqlcmd:错误:Microsoft ODBC Driver 11 for SQL Server:SQL Server 网络接口:定位服务器/实例时出错 [xFFFFFFFF]。

我在 Management Studio 中查询服务器名称SELECT @@ServerName-S在上面的命令之后使用它并得到相同的错误。

PS C:\> sqlcmd -S localdb 给出这个错误:

Sqlcmd:错误:用于 SQL Server 的 Microsoft ODBC 驱动程序 11:命名管道提供程序:无法打开与 SQL Server 的连接 [53]

其他注意事项:我能够连接到服务器并使用此连接字符串在 C# 控制台应用程序中使用名为testdb01的数据库System.Data.SqlClient

"Data Source=(localdb)\\mssqllocaldb;Initial Catalog=testdb01;Integrated Security=SSPI;"
Run Code Online (Sandbox Code Playgroud)

sql-server powershell sqlcmd sql-server-localdb

15
推荐指数
1
解决办法
2万
查看次数

在 SQLCMD 模式下设置变量

使用 SQL Server 2008 R2 企业版

考虑以下语句:

:setvar source_server_name "SERVERNAME\INSTANCENAME"
Run Code Online (Sandbox Code Playgroud)

是否可以在 SQLCMD 模式下使用 TSQL 获取该值

就像是: :setvar source_server_name = SELECT @@servername

谢谢

2013 年 7 月 15 日更新

下面提供的两个答案并没有给出理想的结果,所以我添加了一个更相关的例子。

:setvar source_server_name [myserver]
Run Code Online (Sandbox Code Playgroud)

变量 source_server_name 设置为文本字符串 [myserver_1]

我希望能够做到这一点:

create table #tmp(
id int identity(1,1),
server sysname
)

insert into #tmp values('myserver_1'),('myserver_2');

:setvar source_server_name = SELECT server FROM #tmp WHERE id = 1

select '$(source_server_name)' 

(No column name)
myserver_1
Run Code Online (Sandbox Code Playgroud)

变量 source_server_name 将设置为 ID 1 的服务器中的值。

sql-server sql-server-2008-r2 sqlcmd

14
推荐指数
1
解决办法
2万
查看次数

如何在 Linux 上使用 sqlcmd 连接到 SQL Server?

我已经在 Ubuntu 16.04 机器上为 SQL Server 设置了 Microsoft ODBC Driver 13。我现在正在尝试测试一个数据库连接,其中包括服务器名称和实例名称。

以下都可以在 Windows 机器上正常工作:

sqlcmd -S "SERVERNAME\INSTANCENAME" -U User -P pwd -d DatabaseName -Q "SELECT TOP 5 Id FROM dbo.MyTable;"
sqlcmd -S SERVERNAME\INSTANCENAME -U User -P pwd -d DatabaseName -Q "SELECT TOP 5 Id FROM dbo.MyTable;"
Run Code Online (Sandbox Code Playgroud)

但是,它们都不适用于 Linux - 它们都返回下面的错误消息。该错误意味着找不到服务器:

Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : MAX_PROVS: Error Locating Server/Instance Specified [xFFFFFFFF]. . …
Run Code Online (Sandbox Code Playgroud)

sql-server linux ubuntu sqlcmd

13
推荐指数
1
解决办法
7万
查看次数

有没有人在实践中使用过 sqlcmd 模式?

SQLServer 2005 引入了称为SQLCMD 模式 msdn 链接的东西 。

乍一看,这种模式从命令行批处理文件中添加了变量替换,还有一些转义到操作系统命令。

此功能是否在您的环境、生产或测试中使用?

sql-server-2005 ssms sqlcmd

12
推荐指数
1
解决办法
1039
查看次数

如何让 SSMS 像 SSDT 一样在 sqlcmd 模式下使用 :r 使用当前脚本的相对路径?

如果我在同一个文件夹中有 foo.sql 和 bar.sql,则 foo.sql 在 sqlcmd 模式下从 SSDT 运行时可以引用 bar.sql :r ".\bar.sql"。但是,SSMS 不会找到它。Procmon 显示 SSMS 正在寻找%systemroot%\syswow64

带注释的 Procmon 屏幕截图

如何告诉 SSMS 在不显式声明路径的情况下查看当前脚本保存到的文件夹?

sql-server ssms sqlcmd ssdt

11
推荐指数
2
解决办法
5153
查看次数

如何垂直显示 MS SQL 结果?

这是我目前在执行查询时得到的sqlcmd

1> SELECT 1,2,3,4
2> GO

----------- ----------- ----------- -----------
          1           2           3           4

(1 rows affected)
Run Code Online (Sandbox Code Playgroud)

虽然在更长的结果的情况下,这种输出格式不是人类可读的,因为它被包装在终端中。

如何垂直显示结果(相当于\Ginmysql)?或者以另一种人类可读的方式?

sql-server sqlcmd

10
推荐指数
3
解决办法
2万
查看次数