首先,我不是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)
但我宁愿解决"为什么我不能使用空格?" 而不是问题.
非常感谢.
汤姆
我一直在创建一些 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 除了终止进程。
我正在尝试使用单个.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文件,运行一个但不运行另一个等的问题等.
我的两个问题是:
在这篇关于使用 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 无法识别该代码行?
这有效,但在 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 吗?
我认为这个问题的答案是否定的,但是我没有找到我想要解决的问题的引导.
我最初有一个脚本通过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)
感谢任何人可以尝试解决这个问题,而不是我遇到的问题,只是这个问题!:)
这是我的查询:
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脚本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\DbName和localhost\DbName.结果相同.我还查看了配置管理器,并确保为SQL Native Client 10.0启用了命名管道和TCP.
如何运行此脚本?
我已经为此苦了一段时间了。我正在尝试调用一个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变量。
我需要转储SQL Server数据库的数据库结构,但我需要从SQL查询或sqlcmd脚本中执行此操作.
有没有有效的方法呢?
谢谢
sqlcmd ×10
sql-server ×5
powershell ×2
t-sql ×2
ajax ×1
batch-file ×1
bcp ×1
csv ×1
for-xml ×1
install ×1
javascript ×1
jquery ×1
php ×1
smo ×1
sql ×1
utf-8 ×1
xml ×1