有关如何实现这一目标的任何想法?
USE [db_name]
BEGIN TRANSACTION
...TONS OF INSERTS
COMMIT;
RAISERROR (..) WITH NOWAIT; //If error continue with next batch
BEGIN TRANSACTION
...TONS OF INSERTS
COMMIT;
RAISERROR (..) WITH NOWAIT;
...
Run Code Online (Sandbox Code Playgroud) 我确定这些之前已被问到但是找不到明确说明如何创建批处理文件让我们称之为"更新数据库"这个批处理文件应该
执行位于不同文件夹中的sql脚本执行另外3个bat文件.
任何快速的例子如何做?从来没有做过感谢很多
我可以这样做吗?
:On Error exit
:r C:\myPath\MasterUpdateDatabase.bat
GO
SQLCMD -S (Local) -i C:\myPath\InsertUsername.sql
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
"GO"不被视为内部外部命令
感谢您的任何意见
我在SQL Server数据库项目(Visual Studio 2013)上运行由"发布">"生成脚本"对话框生成的SQL脚本时遇到问题.
生成的脚本执行正常,如果在SQLCMD模式下从SQL Management Studio运行,则通常需要2-10秒.但是,如果使用SQLCMD.exe(通过CMD或批处理文件)运行,它似乎挂起并且永远不会完成.我猜测有一些额外的参数(预设?)SQL Management Studio用来执行脚本但是我无法直接使用SQLCMD.正在生成的SQL脚本通常最多只有200行.这是我正在使用的命令(在Windows Server 2012R2上以批处理文件的形式运行,以管理员身份运行):
"D:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.exe" -S SQLSERVER1 -i "D:\Database\MyDatabase.publish.sql"
Run Code Online (Sandbox Code Playgroud)
我没有看到任何错误,但SQLCMD从未退出,促使我不得不杀死这个过程.下面是"发布"对话框创建的脚本类型的示例:
/*
Deployment script for MyDatabase
This code was generated by a tool.
Changes to this file may cause incorrect behavior and will be lost if
the code is regenerated.
*/
GO
SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;
SET NUMERIC_ROUNDABORT OFF;
GO
:setvar DatabaseName "MyDatabase"
:setvar DefaultFilePrefix "MyDatabase"
:setvar DefaultDataPath "D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\"
:setvar DefaultLogPath "D:\Program Files\Microsoft SQL …Run Code Online (Sandbox Code Playgroud) 在PowerShell中,我使用Microsoft.SqlServer.Dac.DacServices和Microsoft.SqlServer.Dac.DacDeployOptions来部署/更新数据库DACPAC.我遇到的问题是找到设置程序包所需的SQLCMD变量的位置.
# Create a DacServices object, which needs a connection string
$dacsvcs = New-Object Microsoft.SqlServer.Dac.DacServices "server=$sqlserver"
# Load dacpac from file
$dp = [Microsoft.SqlServer.Dac.DacPackage]::Load($dacpac)
# Deploy options
$deployOptions = New-Object Microsoft.SqlServer.Dac.DacDeployOptions
$deployOptions.IncludeCompositeObjects = $true
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用SqlPackage.exe输入这些内容,也许这就是我应该做的.但是在文档或Web浏览器中没有任何地方可以找到DacServices使用SQLCMD变量作为选项的示例 - SQLCMD变量作为我项目的DACPAC的必需参数.
我需要通过跳转盒(Azure VM)从本地计算机连接到 Azure SQL DB。我使用以下命令设置端口转发:
ssh -fN -L 41433:my-db.database.windows.net:1433 me@jump-box
Run Code Online (Sandbox Code Playgroud)
我可以确认隧道已设置,因为在详细模式下我看到了消息
Local connections to LOCALHOST:41433 forwarded to remote address my-db.database.windows.net:1433
Run Code Online (Sandbox Code Playgroud)
现在,当我跑
sqlcmd -S 127.0.0.1,41433 -U username -P password -d db
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : [Microsoft][ODBC Driver 13 for SQL Server]
[SQL Server]Cannot open server "127.0.0.1" requested by the login. The login failed..
Run Code Online (Sandbox Code Playgroud)
我已经确保/etc/ssh/sshd_config有线条GatewayPorts yes和AllowTcpForwarding yes
有人可以帮我弄清楚我做错了什么吗?
我希望能够做的是能够在Visual Studio数据库项目中创建一个定义变量的publising xml脚本,该脚本将用于编写脚本.
我的问题是我得到一个错误:"SQL72008:未定义变量DeployType." 如果我没有在后部署脚本中定义变量,就像这样":setvar DeployType"varchar(100)"
当我运行publish.xml时,DeployType参数正确地设置在生成的脚本的顶部但是该值被":setvar DeployType"varchar(100)覆盖.所以为了使这项工作,我需要手动删除运行此脚本之前的行.
所以问题是如何在没有在postdeployment脚本中默认setvar变量的情况下让项目构建并能够发布?

这是我的PostDeployment.sql文件的内容,它不会在没有默认DeployType变量的情况下构建
--The line causing my problems. I would like to skip it somehow.
:setvar DeployType "varchar(100)"
Print 'Always include core'
:r ..\Data\Core\_BaseCore.sql
--Conditionaly add based on DeployType comming from the publishing.xml
IF ('$(DeployType)' = 'A')
BEGIN
:r ..\Data\A\_BaseKnap.sql
END
ELSE IF ('$(DeployType)' = 'B')
BEGIN
:r ..\Data\B\_BaseB.sql
END
Run Code Online (Sandbox Code Playgroud)
这是Database.publish.xml文件中的内容
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<IncludeCompositeObjects>True</IncludeCompositeObjects>
<TargetDatabaseName>db name</TargetDatabaseName>
<DeployScriptFileName>Database.sql</DeployScriptFileName>
<ProfileVersionNumber>1</ProfileVersionNumber>
<TargetConnectionString>Connection string</TargetConnectionString>
</PropertyGroup>
<ItemGroup> …Run Code Online (Sandbox Code Playgroud) 我正在尝试将sqlcmd查询的输出设置为批处理文件中的变量.
这是我的查询:
sqlcmd -S <SERVER> -d <DATABASE> -Q "select max(Column1)+1 from Table1"
Run Code Online (Sandbox Code Playgroud)
这给了我我期望的和我想要的东西:
-----------
10
<1 rows affected>
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将其设置为变量时,我使用了以下脚本:
for /f %%a in ('sqlcmd -S <SERVER> -d <DATABASE> -Q "select max(Column1)+1 from Table1"')
do set ColumnVar=%%a
echo %ColumnVar%
pause
Run Code Online (Sandbox Code Playgroud)
这给了我这个结果:<1 rows affected>我猜这是因为循环将变量设置为最后一行.那么有没有一种方法可以使用令牌和delims来解析10呢?
当我从我的SQL Server 2008实例上的cmd运行它时:
sqlcmd -U sa -S mymachinen_name\MSSQLSERVER
Run Code Online (Sandbox Code Playgroud)
(MSSQLSERVER我的实例名称在哪里)
我得到密码提示,之后我得到了这个:
密码:
HResult 0x57,Level 16,State 1 SQL Server网络接口:连接字符串无效[87].
Sqlcmd:错误:Microsoft SQL Server Native Client 10.0:建立与SQL Server的连接时发生了与网络相关或特定于实例的错误.找不到服务器或无法访问服务器.检查实例名称是否正确以及SQL Server是否配置为允许远程连接.有关详细信息,请参阅SQL Server联机丛书..
Sqlcmd:错误:Microsoft SQL Server Native Client 10.0:登录超时已过期.
我启动了SQL Server浏览器服务,也可以通过Windows身份验证登录Management Studio.
还发现了这篇知识库文章,但这是针对SQL Server 2005/2000的.
我正在使用sqlcmd(sqlcmd引用)在dos批处理文件(而不是PowerShell)中备份大型数据库.大约需要30分钟.
sqlcmd -S 127.0.0.1 -d DbNameHere -E -Q "BACKUP DATABASE [DbNameHere] TO DISK = N'c:\Temp\MyBackup.bak' WITH COPY_ONLY, NOFORMAT, INIT, NAME = N'My Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
Run Code Online (Sandbox Code Playgroud)
如果在SQL Management Studio中运行BACKUP命令,则会获得输出:
10 percent processed.
20 percent processed.
...
Run Code Online (Sandbox Code Playgroud)
在DOS批处理中,充其量,当备份完成时,我将所有10,20,30..100全部出现在屏幕上.
我试过玩这些参数,但我仍然没有在屏幕上获得所需的进度更新:
-m-1
-V 1
-r1
Run Code Online (Sandbox Code Playgroud)
这些进度消息是缓冲的,这可能是问题的一部分.这里有例如:如何在TSQL中刷新PRINT缓冲区? 但我有一个长时间运行的命令,而不是多个命令.
您可以在其他地方运行单独的SQL语句,它会告诉您进度甚至估计的完成时间:
SELECT session_id as SPID, command, a.text AS Query, start_time, percent_complete, dateadd(second,estimated_completion_time/1000, getdate()) as estimated_completion_time
FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a
WHERE r.command in ('BACKUP DATABASE','RESTORE DATABASE') …Run Code Online (Sandbox Code Playgroud) 我正在使用 SQLCMD 模式。我想设置 setvar 变量值。我应该如何在 :setvar 中设置值?我的代码是这样的:
DECLARE @DatabaseName AS nvarchar(180)
set @DatabaseName = '$(dbName)'
print @DatabaseName
:setvar DatabaseName @DatabaseName
Run Code Online (Sandbox Code Playgroud) sqlcmd ×10
sql-server ×7
sql ×4
batch-file ×3
azure ×1
cmd ×1
dacpac ×1
for-loop ×1
msbuild ×1
powershell ×1
ssh ×1
ssh-tunnel ×1
t-sql ×1