65.9K
CodeProject 正在变化。 阅读更多。
Home

检查 SQL Server 存储过程/视图/函数的有效性(更新)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.22/5 (9投票s)

2008 年 5 月 2 日

BSD

2分钟阅读

viewsIcon

73573

downloadIcon

736

用于检查 SQL Server 数据库中对象有效性的命令行工具。

引言

这是 IPC2000 发布的 代码的更新版本。 已进行以下更改

  • 已删除对企业库的引用,从而可以在指定连接字符串时提供更大的灵活性。 可以在命令行上指定连接字符串和详细级别。
  • 输出更“适合电子表格”,使用可复制/粘贴到 Excel 中的制表符分隔输出
  • 引入了对 SQL 2005 的支持。 SQL 2005 中用户与模式的分离需要略有不同的 SQL 语句。
  • 验证逻辑已移至单独的类,允许在另一个项目中引用/使用。 这对于包含为 NUnit 测试特别有用。

背景

请参考 这篇文章,了解有关验证的更多背景信息。 这只是该部分内容的改进版本。

Using the Code

控制台可执行文件可以运行,指定 /c:<连接 字符串> 参数以及 /v:<详细级别> 参数。 详细级别的值为

  • 安静:专为电子表格设计,无效对象的制表符分隔列表
  • 正常(默认):包括一些正在发生的事情的描述。 检测到的 SQL Server 版本以及已处理的对象和对象失败的摘要
  • 详细:代码将列出它正在处理的每个对象 

更新

添加了一个新的开关 /x,要求程序实际运行它认为安全的任何过程、函数、视图。  如果对象的文本中出现 CREATEDROPINSERTUPDATEDELETEEXEC/EXECUTE ,它将继续,否则,它将为它找到的每个参数添加一个虚拟值并执行该对象。  由于逻辑并不完美(存储过程可以调用做坏事的函数),所以默认情况下会关闭它,但如果使用最佳实践对系统进行编码,启用它通常是安全的。  此功能背后的测试有限 - 如果您发现问题,请在下面评论,我将尽快查看。

您也可以将可执行文件直接引用到 NUnit 中并运行相应的方法。 这是一个 C# 测试方法的示例

[TestFixture]
public class DatabaseValidation
{
    [Test]
    public void CheckForDatabaseCompilationProblems()
    {
	Assert.IsTrue(
	DatabaseValidator.Validator.DatabaseIsValid(
	ConfigurationManager.ConnectionStrings
	[MyConnectionString].ConnectionString,
	DatabaseValidator.Verbosity.Normal),
	"Invalid objects found in the database - Run SqlValidator");
    } 
} 

历史

  • 2008-05-02:初始发布
© . All rights reserved.