【发布时间】:2017-05-02 13:54:39
【问题描述】:
众所周知,就性能而言,建议使用 SQL Server 存储过程而不是内联代码。但是,出于各种原因,我仍然在 Visual Studio 中使用内联 SQL 查询:
- 查询可以整齐地组织在单独的文本文件 (
.sql) 和文件夹结构中。 - 这些文件是 Visual Studio 解决方案的一部分,因此提交给源代码管理。
- 对 SQL 查询的更改可以与应用程序一起发布(对于 ASP.NET 应用程序使用 WebDeploy,对于 Windows 应用程序使用 ClickOnce)。
- 无需同步对 SQL 查询的更改和发布新版本的应用程序。
- 即使我处于离线状态(或无法访问该特定 SQL Server),它也使我能够处理 SQL 查询。
我还没有准备好放弃这些优势,但我仍然知道我正在牺牲性能。
有没有办法两全其美?
提前感谢您提供任何见解。
克里斯
【问题讨论】:
-
您可以在 Visual Studio 中创建一个 SQL 项目。这至少将它们置于源代码控制之下,并允许您组织它们并离线处理它们。
-
您可以将存储过程定义存储为文本文件(在我的上一个项目中,我们经常这样做,将它们存储为过程的 .sqlp、函数的 .sqlf 和视图的 .sqlv,只是这样我们' d知道什么是什么)。在我的新工作中,我们在 Visual Studio 中使用 SQL 数据库项目,它可以完成所有这些工作并且更方便一些,因为您可以直接将其与数据库同步,因此您可以在 Visual Studio 中编写更改,然后像发布一个应用程序,您可以让它记录它在发布操作期间运行的脚本,这样您就有了审计线索。
-
@ADyson 只是为了始终识别文件类型,我将我的命名为 usp_{procName}.sql(用于存储过程)或 uf_{functionName}.sql 或 uv_{viewName}.sql .这样您就知道它是什么文件类型,并且您可以保留 .sql 扩展名以便“识别”它
-
@ganders 好点。但是他们(比我早 10 年)编写了一个完全自定义的小脚本,该脚本将从预定义的文件夹结构中读取文件,查看文件扩展名以了解如何处理它,然后部署它。它可以一键完成整个预补丁,代码更新,补丁后部署运行文件夹结构。所以扩展识别的问题并不是真正的问题,正如工具所期待的那样。我只是设置我的编辑器将扩展关联为 SQL 文件。
-
这是一个众所周知的、有据可查的神话,即存储过程会比类似的适当参数化 内联 T-SQL 查询。这只是不是这样!停止传播这个神话......
标签: c# asp.net sql-server visual-studio