标签: sqlcmd

如何使用BAT文件运行脚本?

我想有一个BAT文件打开一个sql server脚本.目前我在sql文件中有这个代码:

declare @path varchar(255), @mydb varchar(50)
SELECT @mydb = 'timeclockplus'
select @path = 'C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\Backup\' 
            + @mydb + '-' + convert(varchar(8),getdate(),112) + '.bak'
BACKUP DATABASE @mydb TO DISK = @path
Run Code Online (Sandbox Code Playgroud)

如何从BAT文件中打开此SQL文件?

我目前正在尝试像这样运行它:

C:\Program Files\Microsoft SQL Server\80\Tools\Binn\osql -E 
   -S Sql server-hl7\timeclockplus timeclockplus.sql -oresults.txt
Run Code Online (Sandbox Code Playgroud)

但是BINN目录中不存在OSQL,

sql windows sql-server batch-file sqlcmd

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

如何判断变量(-v)是否在命令行中定义(SQLCMD)

有没有办法判断是否使用SQLCMD在命令行上定义了变量?

这是我的命令行:

sqlcmd -vDB="EduC_E100" -i"Z:\SQL Common\Admin\ProdToTest_DB.sql"

ProdToTest_DB.sql里面我想设置某种条件IF来检查变量是否不存在,如果不存在则定义它.

IF NOT $(DB)
:setvar DB "C_Q200"
END

我想允许脚本从命令行和SSMS内部运行.

提前致谢.

sql-server sql-server-2005 sqlcmd

8
推荐指数
1
解决办法
4830
查看次数

即使在使用中也使用MSBuild删除数据库

我在MSBuild文件中使用以下命令来删除数据库

sqlcmd -E -S <ServerName> -Q "DROP DATABASE <DBName>"
Run Code Online (Sandbox Code Playgroud)

但有时我会得到错误

无法删除数据库,因为它当前正在使用中.

我应该使用什么命令,以便即使数据库被使用也会被丢弃?

sql-server msbuild sqlcmd

8
推荐指数
2
解决办法
4930
查看次数

Sqlcmd尾随输出文件中的空格

这是我的简化方案:

我在SQL Server 2005中有一个表,其中包含单列类型varchar(500).列中的数据总是350个字符.

当我在SSMS查询编辑器中运行select时,将结果集复制并粘贴到文本文件中,文件中的行长为350,与实际数据长度匹配.

但是当我使用sqlcmd-o参数,生成的文件具有线长500,其中的最大长度相匹配varchar(500).

所以问题是,如果不使用任何字符串函数select,有没有办法让我们sqlcmd知道不要对待它char(500)

sql-server-2005 sqlcmd

8
推荐指数
1
解决办法
9483
查看次数

Powershell SqlCmd - 使用结果值而不定义变量

我想知道是否有任何方法可以在后续查询中使用数据集的值.
这是一个例子:

作品:

$Result = Invoke-Sqlcmd -query "SELECT Id, FirstName, LastName FROM Person" 
foreach($item in $Result){
  $ID= $item.Id 
  $SaleResults = Invoke-Sqlcmd -query "SELECT * FROM Sales WHERE Salesperson = $ID"
}
Run Code Online (Sandbox Code Playgroud)

不起作用:

foreach($item in $Result){
  $SaleResults = Invoke-Sqlcmd -query "SELECT * FROM Sales WHERE Salesperson=$Item.Id"
}
Run Code Online (Sandbox Code Playgroud)

第二个示例失败,因为它使用$ Item.Id作为字符串而不是uniqueidentifier,因此错误:"从字符串转换为uniqueidentifier时转换失败".

知道如何使用正确类型的这些值,而不创建单独的变量?

sql variables powershell sqlcmd literals

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

通过sqlalchemy和pyodbc访问MS SQL数据库时出现"登录超时已过期"错误

所以我在使用远程MS SQL Server进行sqlalchemy和pyodbc时遇到了一些麻烦.本地sqlcmd工作正常但不是当我尝试通过python代码读取数据库时.任何帮助,将不胜感激.

环境:

  • Centos 7
  • SQLCmd版本:版本17.1.0000.1 Linux
  • MS SQL Server 6.01.7601.17514
  • Python 2.7

以下sqlcmd正常工作

sqlcmd -S {Host},{Port} -U {USER} -P {PWD} -Q "use {Database};"
Run Code Online (Sandbox Code Playgroud)

试图直接使用sqlalchemy或pyodbc不起作用.错误:

pyodbc.OperationalError:('HYT00',u'[HYT00] [unixODBC] [Microsoft] [SQL Server的ODBC驱动程序17]登录超时过期(0)(SQLDriverConnect)')

代码:尝试使用pyodbc

conn = pyodbc.connect(
    r'DRIVER={ODBC Driver 17 for SQL Server};'
    r'SERVER=HOST,PORT;'
    r'DATABASE=DATABASE;'
    r'UID=UID;'
    r'PWD=PWD'
    )
Run Code Online (Sandbox Code Playgroud)

尝试使用sqlalchemy:

create_engine('mssql+pyodbc://{user}:{password}@{host}:{port}/{database}?driver={driver}'.format(
        user=user,
        password=password,
        host=host,
        database=database,
        port=port,
        driver="ODBC+Driver+17+for+SQL+Server"
    )).connect()
Run Code Online (Sandbox Code Playgroud)

如果我从命令中删除端口,我可以使用sqlcmd重现错误,所以我传递给pyodbc的conn_string可能格式不正确吗?

sql-server sqlalchemy sqlcmd pyodbc

8
推荐指数
2
解决办法
3486
查看次数

需要帮助编写执行sql脚本的bat文件(sql server 2008和另外3个文件.?

我确定这些之前已被问到但是找不到明确说明如何创建批处理文件让我们称之为"更新数据库"这个批处理文件应该

执行位于不同文件夹中的sql脚本执行另外3个bat文件.

任何快速的例子如何做?从来没有做过感谢很多

EDITED

我可以这样做吗?

: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 t-sql sql-server sqlcmd

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

PowerShell使用**DacServices**和SQLCMD变量来部署DACPAC

在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的必需参数.

powershell sqlcmd dacpac sql-server-data-tools

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

如何使SSDT Profile.xml SqlCmdVariable为空字符串或可选

我正在为我们的MSSQL项目使用SSDT(和sqlproj).发布到每个环境时,我们需要设置一些变量.

这在我们为所有变量赋值的大多数环境中都很有用,但是当我们发布到我们的实时数据库时,我希望能够使DomainPrefix成为空白字符串.

当我尝试更改Live.profile.xml以将DomainPrefix设置为无值时,我收到错误:"生成部署计划期间发生错误.部署无法继续.缺少以下SqlCmd变量的值:DomainPrefix."

这就是我希望Live.profile.xml看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0">
  <PropertyGroup>
    <TargetDatabaseName>DB_NAME</TargetDatabaseName>
    <DeployScriptFileName>DB_NAME.sql</DeployScriptFileName>
    <TargetConnectionString>CONNECTION_STRING</TargetConnectionString>
    <ProfileVersionNumber>1</ProfileVersionNumber>
  </PropertyGroup>
  <ItemGroup>
    <SqlCmdVariable Include="DomainPrefix">
      <Value></Value>
    </SqlCmdVariable>
    <SqlCmdVariable Include="Environment">
      <Value>live</Value>
    </SqlCmdVariable>
  </ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

有谁知道如何将SqlCmdVariable设置为空值或使其成为可选变量?

使用:

  • VS 2013 sqlproj
  • SqlPackage.exe从命令行运行发布到DB

sql-server sqlcmd sqlproj sqlpackage sql-server-data-tools

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

无法使用 sqlcmd 通过 SSH 隧道访问 SQL 数据库

我需要通过跳转盒(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 yesAllowTcpForwarding yes

有人可以帮我弄清楚我做错了什么吗?

ssh sqlcmd azure ssh-tunnel azure-sql-database

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