标签: database-project

VS2013 数据库项目 - 忽略匹配过滤器的模式/表?

我有一个包含许多缓存/生成表的数据库。当我进行模式比较时,我想(永久)排除这些。有什么方法可以配置模式比较以忽略特定模式,或者更好的是,特定对象名称?例如,我想忽略名称以“XYZ”开头的“缓存”模式中的所有表。

我意识到如果我忽略一个对象一次,它的“忽略状态”就会持续存在。但是,我仍然会在比较结果中看到它(例如,图 1,000 被忽略的表)。我正在寻找一种永久隐藏或根本不显示被忽略对象的方法。

另一个例子是,如果我想将一个大型数据库拆分为多个可重用的项目。在运行模式比较时,我可能希望从每个项目中排除某些模式。

sql-server database-project visual-studio schema-compare

6
推荐指数
1
解决办法
1392
查看次数

对象名称中不允许使用 SqlCmd 变量引用

我正在创建一个 Visual Studio 数据库项目。

在其中一个脚本中,我想实现类似的目标

CREATE USER [$(DatabaseName)\UserX]
    WITHOUT LOGIN
    WITH DEFAULT_SCHEMA = dbo
Run Code Online (Sandbox Code Playgroud)

哪个弹出窗口错误

SQL70604: 对象名称 ($(DatabaseName)\UserX) 中不允许 SqlCmd 变量引用。

经过一番研究,我发现最接近的解决方案是创建用户,sp_executesql但它会导致模式比较功能无效,对吧?

我对数据库项目不太熟悉,但我想应该有一些更好的方法来实现这一目标,我只需要一些指导。

t-sql database-project sql-server-2012 visual-studio-2017

6
推荐指数
0
解决办法
1127
查看次数

使用Visual Studio在数据库项目和数据库之间同步权限

我在visual studio(2008)中有一个数据库项目,用于将我的数据库结构保存在版本控制系统(Git)中.我使用VS中的数据模式比较工具来维护这个数据库项目.我遇到的问题是我一直在丢失对新对象的权限.

那么我该怎么做:

  1. 使用架构比较工具捕获这些权限.
  2. 使用架构比较工具将这些权限应用于服务器.

database database-project datadude visual-studio

5
推荐指数
1
解决办法
1896
查看次数

使用Visual Studio数据库项目进行非平凡的增量更改部署

我们假设我正在对我的数据库进行某种非常重要的更改,这需要"自定义"工作从版本A升级到B.例如,将用户ID列从UUID数据类型转换为Windows域用户名.

如何使其自动部署?也就是说,我想允许开发人员右键单击项目,单击"Deploy"并在他们使用足够老的数据库时执行此逻辑.

我没有在数据库项目中看到任何此类登录的位置 - 似乎没有任何此类"升级脚本"的规定.这真的不可能吗?为了澄清,逻辑显然不能自动生成,但我希望它根据需要自动执行.

当然,第一个逻辑障碍是部署实用程序不知道是否需要更新任何此类逻辑 - 我假设我也可以为此提供逻辑(例如,检查版本表以及是否最新version <5.0,执行此升级,稍后添加新版本行).

这可能吗?我可以使用复杂的自定义更改脚本进行全自动部署吗?没有我必须将我的所有自定义更改逻辑都粘贴到(即将成为)巨大的构建前或构建后脚本中,当然......

sql-server database-project database-versioning visual-studio

5
推荐指数
1
解决办法
1156
查看次数

在Visual Studio数据库项目/ SQL Server中创建默认数据

有没有办法在VS 2010的数据库项目中使用数据生成计划来创建一组默认数据?或者我咆哮错误的树,即最适合创建虚拟示例数据的数据生成计划?

我们有一堆数据(默认设置,默认用户等)需要为每个数据库部署创建.有工具来帮助我们这样做会很好,所以它可以是源代码控制和更好的管理.

我猜测可能有第三方替代方案,但我希望有一个内置的Visual-Studio-Way方式,所以它可以很好地与TFS等集成.

sql-server database-project visual-studio-2010

5
推荐指数
1
解决办法
3332
查看次数

"将端点上的连接作为[sa]"做什么?

我正在浏览我的Visual Studio数据库项目生成的脚本,我发现了这个:

GRANT CONNECT
    ON ENDPOINT::[TSQL Default TCP] TO PUBLIC
    AS [sa];
Run Code Online (Sandbox Code Playgroud)

我不知道它做了什么,但它似乎将PUBLIC访问权限授予SA(仅通过它的读取方式).

有人知道这到底是做什么的吗?(显然它通过"ENDPOINT"授予一些访问权限.但是用简单的英语做什么呢?)

通过阅读它,它告诉我任何通过TCP端口连接的人都可以作为[sa]运行.(我希望这不对,但如果是的话,为什么Visual Studio的DB Project会这样做?)

sql t-sql sql-server database-project sql-server-2008

5
推荐指数
1
解决办法
4059
查看次数

为什么Msbuild任务无法部署数据库,但Exec工作正常

我正在尝试在自动构建服务器处理中部署数据库项目(dbproj格式,而不是新的SSDT sqlproj).我找到了以下内容:

当我在我的Msbuild脚本中使用Exec任务调用deploy时 - 一切正常:

<Exec Command="$(MSBuildPath)\MSBuild.exe $(SourceFilesPath)\$(DeployDatabaseProjectName)\$(DeployDatabaseProjectName).dbproj 
/t:Deploy 
/p:OutputPath=$(BaseOutput)\$(DeployDatabaseProjectName)\ 
/p:TargetDatabase=$(DeployDatabaseName)
/p:TargetConnectionString=$(DeployDatabaseConnectionString)" />
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用Msbuild任务重复此操作时 - 它的行为有所不同:

<MSBuild Projects="$(SourceFilesPath)\$(DeployDatabaseProjectName)\$(DeployDatabaseProjectName).dbproj" 
            Targets="Deploy"
            Properties="Configuration=$(BuildConfiguration);
            TargetDatabase=$(DeployDatabaseName);
            TargetConnectionString=&quot;$(DeployDatabaseConnectionString)&quot;;
            OutputPath=$(BaseOutput)\$(DeployDatabaseProjectName)\;
            " />
Run Code Online (Sandbox Code Playgroud)

DeployDatabaseConnectionString中的分号破坏了Msbuild任务:

<DeployDatabaseConnectionString>Data Source=$(DeployDatabaseServer);Integrated Security=True;Pooling=False</DeployDatabaseConnectionString>
Run Code Online (Sandbox Code Playgroud)

它会报告这样的事情:

名称"Integrated Security"包含无效字符"".

但是如果我用百分比编码值 - %3B替换分号 - 它将在SqlDeployTask中破坏:

错误MSB4018:"SqlDeployTask"任务意外失败.

将TargetConnectionString传递给SqlProject的部署目标的正确方法是什么?

PS:我可以忍受exec任务很好,但是在msbuild脚本中调用msbuild.exe会伤害我内在的完美主义者.

deployment msbuild database-project

5
推荐指数
1
解决办法
1361
查看次数

如何防止VS2010数据库项目部署生成丢弃数据库?

假设您有一个数据库项目,并且您没有在Database.sqldeployment设置中选中"始终重新创建数据库".并假设您按照要部署的名称部署到已具有数据库的服务器.

在其他情况下数据库部署会生成带有"DROP DATABASE"语句的脚本吗?

如果您从未希望通过右键单击数据库项目并选择"部署"生成的部署脚本来删除数据库,那么您可以采取哪些步骤来防止这种情况发生?

sql-server database-project visual-studio-2010 database-deployment drop-database

5
推荐指数
1
解决办法
1635
查看次数

Visual Studio数据库部署 - 脚本未在SQLCMD模式下运行

我有一个SQL Server 2008数据库项目,我正在尝试使用Visual Studio 2010进行部署.当我单击部署时,构建工作正常,但在创建部署脚本并开始执行它之后,我收到以下错误:

错误8 SQL80001:'DatabaseName'不是可识别的选项.

错误7 SQL80001:':'附近的语法不正确.

查看部署脚本,它包含以下行:

:setvar DatabaseName"DEV_DB"

...

:出错时

因此,看起来SQL Server没有在SQLCMD模式下运行部署脚本来理解该语法.如果我正在复制并粘贴到SSMS中,我可以设置该选项,但我想直接从Visual Studio进行部署.哪里有VS运行SQLCMD模式这个脚本设置如何设置的脚本中使用SQLCMD语法不产生?

谢谢.

sqlcmd database-project visual-studio-2010 database-deployment sql-server-2008

5
推荐指数
0
解决办法
2660
查看次数

SQL数据库项目:根据构建配置构建不同的脚本

我想解决的问题是根据构建配置构建不同的脚本.

假设我们有两个SQL Server实例:

  • 已连接链接服务器的企业版
  • 用于离线开发和单元测试的LocalDb版本

当LocalDB使用本地表替换这些视图时,企业版具有链接服务器的视图.

这些链接服务器视图和本地表具有相同的名称和字段集.因此默认情况下它们不包含在构建中(Build Action = None).相反,它们包含在项目文件的BeforeBuild Target中.

<Target Name="BeforeBuild">

    <ItemGroup Condition=" '$(Configuration)' == 'LocalDb'">
        <Build Include="Local_Tables\*.sql" />
    </ItemGroup> 

    <ItemGroup Condition=" '$(Configuration)' != 'LocalDb' ">
        <Build Include="Linked_Server_Views\*.sql" />
    </ItemGroup>

</Target>
Run Code Online (Sandbox Code Playgroud)

但问题是Visual Studio缓存数据库模型,如果我们首先为LocalDb构建项目,然后尝试构建企业配置项目 - Visual Studio输出错误:

错误:SQL71508:模型已经有一个具有相同名称的元素

如果要关闭并打开解决方案或卸载项目和重新加载项目,Visual Studio将重新创建dbmdl文件,并且正在构建企业配置而不会出现错误.

所以我的假设是,如果我刷新dbmdl缓存,我将得到平滑的构​​建,没有错误.


当您打开或在Visual Studio 2012重装SQL Server数据库的项目,它将创建一个具有扩展名的文件dbmdl,这是作为描述的反序列化和缓存数据库模型在这里.

在dbmdl文件重新创建的那一刻,Visual Studio输出以下内容:

Deserializing the project state for project 'MyProject.sqlproj'...
Detecting file changes for project 'MyProject.sqlproj'...
Deserialization has been completed for project 'MyProject.sqlproj'.
Run Code Online (Sandbox Code Playgroud)

如何在没有项目重新加载且不更改项目xml文件的情况下强制Visual Studio刷新dbmdl缓存?

有没有办法刷新dbmdl缓存,将命令放入项目xml文件的BeforeBuild或AfterBuild目标?

或者问题的整个方法是错误的,还有另一种方法可以根据构建配置构建不同的脚本?

msbuild database-project msbuild-target visual-studio-2012 sql-server-data-tools

5
推荐指数
1
解决办法
4510
查看次数