在我的Post Deployment Script中,我想使用这样的通配符将所有脚本文件包含在一个文件夹中:r.\ $(ReleaseName)\*.sql
有没有办法做到这一点?我找不到任何..
我希望能够做的是能够在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) 当我从我的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的.
我有一个大的SQL脚本(1gb),我试图在一个(localdb)\v11.0实例上运行,SqlCmd在命令行窗口中使用,但到目前为止,我尝试过的任何命令都没有使用它.
例如
sqlcmd.exe -S "(localdb)\v11.0" -Q "select 1"
Run Code Online (Sandbox Code Playgroud)
失败并出现通用连接错误:
建立与SQL Server的连接时发生了与网络相关或特定于实例的错误.找不到服务器或无法访问服务器.检查实例名称是否正确以及SQL Server是否配置为允许远程连接.
然而
sqlcmd.exe -S "MY-PC" -Q "select 1"
Run Code Online (Sandbox Code Playgroud)
我的电脑上的SQL Server实例很好用.
在(localdb)实例上"允许远程连接"设置为true,而我运行的用户sqlcmd是它的所有者.
Sqlcmd实际上是否适用于(localdb)实例?还有其他明显的事情我可能做错了吗?
我正在使用 SQLCMD 模式。我想设置 setvar 变量值。我应该如何在 :setvar 中设置值?我的代码是这样的:
DECLARE @DatabaseName AS nvarchar(180)
set @DatabaseName = '$(dbName)'
print @DatabaseName
:setvar DatabaseName @DatabaseName
Run Code Online (Sandbox Code Playgroud) 我有一个大的SQL文件,不适合内存,需要针对Microsoft SQL Server 2008执行.似乎该sqlcmd.exe工具始终首先将其加载到内存中,在这种情况下是不可能的.有任何想法吗?
不幸的是,我无法拆分脚本,因为它是由Red Gate出色的SQL数据比较生成的.整个脚本是一个大事务,我想保持这种方式.我从未想过拥有一个巨大的脚本是不寻常的,因为在数据库世界中拥有大量数据是很常见的.该脚本的大小为3GB.
在SQLCMD中运行脚本时,是否有设置,参数或任何其他方法使其在每个SQL语句结束时有效地运行GO命令?
这样可以防止需要将定期GO命令插入到非常大的脚本中.
我正在使用sqlcmd将带有两列的查询结果导出到csv.简单的查询是:
SELECT DISTINCT
CustomerGuid, CustomerPassword
FROM
ServiceOrder
ORDER BY
CustomerGuid
Run Code Online (Sandbox Code Playgroud)
当我在Excel中打开导出的csv时,客户和密码都在同一列上.是否可以使用sqlcmd将它们拆分为自己的列.我的sqlcmd看起来像
SQLCMD -S . -d BAS -Q "SQL STATEMENT" -s "," -o "c:\data.csv"
Run Code Online (Sandbox Code Playgroud)
谢谢.
使用SQLCMD,我可以将查询结果输出到文本文件,现在,文本文件有标题:

并且页脚:

如何在查询期间删除它们?
我的查询,在一个sql文件中:
SELECT internal_no, item_no, dspl_descr, rtl_prc FROM PLU
我的SQLCMD命令:
SQLCMD -S SQLSERVER01 -U AdminUser -P au5584 -i C:\text.sql -o C:\out.txt
我想通过T-SQL SQL Server 2008上执行一些SQLCMD有我的代码的一部分在那里我检查数据文件的大小,如果该数据文件大小不等于0,然后开始删除特定表,我可以在新数据中使用BCP.
下面是我的代码未执行:
SET @myVariable = '
SETLOCAL
FOR %%R IN (X:\Main Folder\Data\'+@databaseName+'_'+@tableName+'.dat) DO SET size=%%~zR
IF %size% NEQ 0 (
SQLCMD -E -S my-server-name -Q "DELETE FROM '+@databaseName+'.'+@schemaName+'.'+@tableName+';" >> X:\Main Folder\Log\Log.txt
)'
EXEC master..xp_cmdshell @myVariable
Run Code Online (Sandbox Code Playgroud)
由于某种原因,当我执行我的存储过程时,上面的代码似乎被跳过,因为它不会回写任何错误消息.
编辑:重新调整间距和我的代码,@ myVariable,现在执行.但是,即使数据文件大小= 0,它仍然无法删除表.但是,当我在批处理文件中对其进行硬编码时,它的工作方式非常好.有任何想法吗?