标签: sqlcmd

使用SQL Server Management Studio中的setvar转义空格字符

首先,我不是DBA,我没有任何(管理员)SQL Server经验,所以请在回答时使用几个音节很少的单词...

我正在运行SQL Server 2008 R2并尝试编写一个概念验证脚本,该脚本设置非分区,双向,事务复制.我已经设法从MS站点调整脚本工作,现在我正在尝试根据我们的需求进行自定义.这涉及将一堆值拉出到变量中.

我已经将SSMS设置为"SQLCMD模式",并且我的所有变量都可以解析,除了一个.

:setvar ReplicationDirectory 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2\MSSQL\repldata';
Run Code Online (Sandbox Code Playgroud)

这给了我错误:

发生了致命的脚本错误.解析时遇到错误的语法:setvar

我已将问题缩小到变量值中存在空格.根据我一直在阅读的内容,这应该没有问题.我试过用双打替换单引号(正常种类和角度类型)但都给了我同样的错误.

我在网上找不到任何告诉我如何逃避空间角色的东西.我见过的所有文章都说如果字符串在引号中,SSMS只会将它们之间的任何内容解释为单个字符串 - 无论空格如何.

有没有人有任何想法?

我想我可以将变量的值更改为:

:setvar ReplicationDirectory 'C:\Progra~1\Micros~1\MSSQL10_50.SQL2\MSSQL\repldata';
Run Code Online (Sandbox Code Playgroud)

但我宁愿解决"为什么我不能使用空格?" 而不是问题.

非常感谢.

汤姆

sqlcmd sql-server-2008

4
推荐指数
1
解决办法
7674
查看次数

使用 Invoke-SQLCMD、SMO 或 SQLConnection 哪个更好

我一直在创建一些 power shell 脚本,并且我主要使用 Invoke-Sqlcmd 作为查询数据库或输入 .sql 文件的一种方式,但是我在包含访问和终止进程方面遇到了一些麻烦。

我一直在使用 SMO 来终止进程

$SQlSvr1 = New-Object Microsoft.SqlServer.Management.Smo.Server $serverInstance
$SQlSvr1.KillAllprocesses($databaseMain)
Run Code Online (Sandbox Code Playgroud)

然后使用 Invoke-Sqlcmd 运行我的进程,一切运行良好,直到我开始收到诸如

A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.) 
Run Code Online (Sandbox Code Playgroud)

如果我没有终止进程,它会返回

无法获得独占访问权限,因为数据库正在使用中。

所以我的问题是,重新生成或保持稳定连接的最佳过程是什么?我不会将所有内容更改为 SMO 或 SQLConnection,或者是否有办法使用 Invoke-Sqlcmd 建立单个连接,但每次我都会杀死/重新排队使用调用。

有问题的脚本首先备份我的数据库,使用 try/catch 中的补丁脚本运行和更新,如果有错误,脚本将在 catch 中备份,所有使用 Invoke-Sqlcmd 除了终止进程。

powershell smo sqlconnection sqlcmd

4
推荐指数
1
解决办法
2763
查看次数

SQL install和sqlcmd在同一个.bat文件中出现问题

我正在尝试使用单个.bat文件:1)在Windows 7 Professional 64位计算机上从SQLEXPR_x64_ENU.exe安装SQL Server 2008 R2 Express,以及2)安装完成后运行一些.sql脚本.

似乎如果sqlcmd从运行安装的同一.bat文件运行,则sqlcmd失败并出现以下错误:"'sqlcmd'未被识别为内部或外部命令,可运行的程序或批处理文件."

如果install和.sql脚本是从单独的.bat文件运行的,那么我没有问题(所以我知道问题不在于sqlcmd语法).我尝试使用单个.bat并在新窗口中运行sqlcmd命令(启动cmd/c"sqlcmd ...")并从原始.bat文件中调用包含sqlcmd命令的第二个.bat文件(\filepath\file.bat)但在每种情况下都会出现相同的错误.

我不希望用户必须启动多个.bat文件,因为这会导致以错误的顺序运行.bat文件,运行一个但不运行另一个等的问题等.

我的两个问题是:

  1. 有谁知道为什么会这样?
  2. 是否有解决方案只涉及启动单个.bat文件?

sql-server install batch-file sqlcmd sql-server-2008-r2

4
推荐指数
1
解决办法
9775
查看次数

什么是 T-SQL 查询中的 :XML ON 以使用 SQLCMD 将数据导出到 XML?

在这篇关于使用 BCP 或 SQLCMD 通过 TSQL 将数据导出到 XML 的博客文章中,我遇到了这行代码:

:XML ON

SELECT
    *
FROM
    dbo02.ExcelTest
FOR XML AUTO, ELEMENTS, ROOT('doc')
Run Code Online (Sandbox Code Playgroud)

我尝试在 sql 查询中使用它,然后通过批处理文件中的 sqlcmd 触发,它确实返回了正确的 xml 文件。如果没有它,:XML ON它会返回网页上所述的奇怪值。

奇怪的是,SSMS (2008) 在解析或执行查询时显示错误的语法。

有什么:XML ON作用以及如何使用它?为什么 SSMS 无法识别该代码行?

xml t-sql bcp sqlcmd sql-server-2008

4
推荐指数
1
解决办法
5357
查看次数

我需要从 SQL Server 转储表到 utf-8 中的 csv

这有效,但在 utf-8 中无效:

sqlcmd -S Server -d DB -E -s, -W -i "C:\Localdata\test.sql" | findstr /V /C:"-" /B > "C:\Localdata\Test.csv"
Run Code Online (Sandbox Code Playgroud)

有人愿意帮助将其修复为 utf-8 吗?

sql-server csv sqlcmd utf-8

4
推荐指数
2
解决办法
4311
查看次数

使用AJAX会增加PHP的内存使用吗?

我认为这个问题的答案是否定的,但是我没有找到我想要解决的问题的引导.

我最初有一个脚本通过SQLCMD进行了一些数据库查询.我现在决定通过AJAX启动此脚本并等待响应.但我得到一个致命的错误:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 445 bytes) in C:\process_txt.php on line 109
Run Code Online (Sandbox Code Playgroud)

我在我的脚本中改变的唯一新事物是这个ajax请求,没有别的说实话,这就是我提出这个问题的原因.

我使用JQuery AJAX请求,我不认为我正在使用轮询.这是我使用的一个示例AJAX GET请求:

function process_txt(checkbox){

            waiting = 1;

            var folder_path = $('#folder_path').val();

            var file_name = $('#'+ checkbox + '_val').val();

            $.get("process_txt.php", { path:  folder_path, file: file_name},

            function(data){

                           alert(data);             

            });

}
Run Code Online (Sandbox Code Playgroud)

感谢任何人可以尝试解决这个问题,而不是我遇到的问题,只是这个问题!:)

javascript php ajax jquery sqlcmd

3
推荐指数
1
解决办法
974
查看次数

使用带有FOR XML的sqlcmd会返回无效的对象名称'dbo.Table',但查询在SSMS中运行

这是我的查询:

SELECT title1, 
    [precinct percent] AS [PrecinctPercent], 
    leader, 
    [leader percent] AS [LeaderPercent], 
    Winner, 
    WinningVotes, 
    leader2, 
    [leader2 percent] AS [Leader2Percent], 
    Loser, 
    LosingVotes 
    FROM [leader].dbo.[RACE]  r inner join
     (select rc.[race number],
             max(case when seqnum = 1 then [candidate num] end) as Winner,
             max(case when seqnum = 1 then Votes end) as WinningVotes,
             max(case when seqnum = 2 then [candidate num] end) as Loser,
             max(case when seqnum = 2 then Votes end) as LosingVotes
      from (select rc.*,
                   row_number() over (partition by rc.[race number] …
Run Code Online (Sandbox Code Playgroud)

sql-server sqlcmd for-xml

3
推荐指数
1
解决办法
3859
查看次数

在本地运行sqlcmd - 找错服务器时出错

我试图在本地运行SQL脚本sqlcmd,但我一直得到以下响应:

HResult 0xFFFFFFFF,级别16,状态1
SQL Server网络接口:错误查找指定的服务器/实例[xFFFFFFFF].

Sqlcmd:错误:Microsoft SQL Server Native Client 10.0:建立与SQL Server的连接时发生了与网络相关或特定于实例的错误.找不到服务器或无法访问服务器.检查实例名称是否正确以及SQL Server是否配置为允许远程连接.有关详细信息,请参阅SQL Server联机丛书..

Sqlcmd:错误:Microsoft SQL Server Native Client 10.0:登录超时已过期

我正在运行以下命令:

sqlcmd -S Server\DbName -E -i C:\data.sql
Run Code Online (Sandbox Code Playgroud)

我也尝试过127.0.0.1\DbNamelocalhost\DbName.结果相同.我还查看了配置管理器,并确保为SQL Native Client 10.0启用了命名管道和TCP.

如何运行此脚本?

t-sql sql-server sqlcmd sql-server-2012

3
推荐指数
1
解决办法
6566
查看次数

sqlcmd。如何传递包含冒号和空格的变量?

我已经为此苦了一段时间了。我正在尝试调用一个sql脚本,并使用sqlcmd将两个变量传递给它。我正在PowerShell中进行所有操作。

这是我得到的:

$time = '12:00 AM'
$date = '06/20/2014'
$result = sqlcmd -U username -P password -i "c:\path\to\script.sql" -v date=$date -v time=$time
Run Code Online (Sandbox Code Playgroud)

这将失败,并显示以下错误消息:

sqlcmd : Sqlcmd: 'time=12:00 AM': Invalid argument. Enter -? for help.
Run Code Online (Sandbox Code Playgroud)

经过一些实验,我发现问题在于$ time中的冒号和空格。如果删除冒号和空格$time = '1200AM',命令将执行而没有任何错误。

不幸的是,我正在执行的脚本需要精确的格式“ 12:00 AM”。

我尝试过的事情不起作用:

$time="12\:00\ AM"
$time="12\\:00\\ AM"
$time="12"+":00"+" AM"
$time="12"+":00"
$time="12"+":"+"00"
Run Code Online (Sandbox Code Playgroud)

这些都以类似的Invalid argument失败响应。最后几次尝试是类似帖子的解决方案。他们不工作。

我还尝试过将字符串值直接放在sqlcmd调用中,如下所示:

$result = sqlcmd -U username -P password -i "c:\path\to\script.sql" -v date=$date -v time="12\:00\ AM". 
Run Code Online (Sandbox Code Playgroud)

没有骰子,无论如何,我需要从其他地方读取时间,因此我需要$ time变量。

powershell sqlcmd

3
推荐指数
1
解决办法
3963
查看次数

有没有办法从SQL Server中的SQL查询生成数据库脚本?

我需要转储SQL Server数据库的数据库结构,但我需要从SQL查询或sqlcmd脚本中执行此操作.

有没有有效的方法呢?

谢谢

sql sql-server sqlcmd sql-server-2008

3
推荐指数
1
解决办法
94
查看次数