我想有一个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,
有没有办法判断是否使用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内部运行.
提前致谢.
我在MSBuild文件中使用以下命令来删除数据库
sqlcmd -E -S <ServerName> -Q "DROP DATABASE <DBName>"
Run Code Online (Sandbox Code Playgroud)
但有时我会得到错误
无法删除数据库,因为它当前正在使用中.
我应该使用什么命令,以便即使数据库被使用也会被丢弃?
这是我的简化方案:
我在SQL Server 2005中有一个表,其中包含单列类型varchar(500).列中的数据总是350个字符.
当我在SSMS查询编辑器中运行select时,将结果集复制并粘贴到文本文件中,文件中的行长为350,与实际数据长度匹配.
但是当我使用sqlcmd与-o参数,生成的文件具有线长500,其中的最大长度相匹配varchar(500).
所以问题是,如果不使用任何字符串函数select,有没有办法让我们sqlcmd知道不要对待它char(500)?
我想知道是否有任何方法可以在后续查询中使用数据集的值.
这是一个例子:
作品:
$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时转换失败".
知道如何使用正确类型的这些值,而不创建单独的变量?
所以我在使用远程MS SQL Server进行sqlalchemy和pyodbc时遇到了一些麻烦.本地sqlcmd工作正常但不是当我尝试通过python代码读取数据库时.任何帮助,将不胜感激.
环境:
以下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脚本执行另外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"不被视为内部外部命令
感谢您的任何意见
在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的必需参数.
我正在为我们的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设置为空值或使其成为可选变量?
使用:
我需要通过跳转盒(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
有人可以帮我弄清楚我做错了什么吗?
sqlcmd ×10
sql-server ×6
sql ×3
powershell ×2
azure ×1
batch-file ×1
dacpac ×1
literals ×1
msbuild ×1
pyodbc ×1
sqlalchemy ×1
sqlpackage ×1
sqlproj ×1
ssh ×1
ssh-tunnel ×1
t-sql ×1
variables ×1
windows ×1