创建和修改数据库和服务器对象

数据库对象定义数据库内容的结构。 这些对象包含在数据库项目中,数据库项目还可以包含数据生成计划和脚本。 服务器对象定义数据库服务器(而不是数据库)中存在的对象,例如登录名、证书或自定义错误消息。 服务器对象包含在服务器项目中。

在**“解决方案资源管理器”中,数据库对象和服务器对象的定义包含在文件中,并在数据库项目或服务器项目中按类型分组。 使用数据库对象和服务器对象时,您可能会发现使用“架构视图”更加直观,在该视图中对象将按类型分组。 如果数据库项目中的文件标记为“生成”Build Type**,则将分析该文件以查看它是否包含数据库对象定义。 包含在数据库项目中但具有其他Build Type的文件,将视为不包含数据库对象且不会显示在**“架构视图”**中。

常规任务

下表列出了支持此方案的常规任务的说明,还提供了一些链接,这些链接指向有关如何成功完成这些任务的更多信息。

任务

支持内容

亲身实践:可以按照介绍性演练操作,熟悉如何创建数据库项目及其对象以及如何修改这些对象。

了解有关数据库对象和服务器对象的更多信息:在本主题的稍后部分,可以了解有关数据库对象和服务器对象的更多信息,包括如何解析名称、如何在对象定义中引用数据库名称,以及如何验证对象。

  • 对象定义

  • 解决方案资源管理器和架构视图中的对象

  • 对象名解析

  • 在对象定义中引用数据库名称

  • 对象级别的 SET 选项

  • 对象验证

了解数据库对象之间的依赖关系:可以查看数据库对象各自所依赖的对象。

向数据库项目或服务器项目中添加对象:可以使用下列任一方法,向数据库项目或服务器项目中添加对象:

  • 可以从脚本、更新的数据库或服务器中导入对象。

  • 可以在默认架构或特定架构中创建对象。

  • 可以向项目中添加包含对象定义的文件。

  • 可以在向项目添加对象后自定义对象级别的选项(称为 SET 选项)。

  • 可以指定对数据库对象的权限。

向数据库项目或服务器项目添加专用对象:若要向项目中添加某些对象类型,则必须遵循与特定于该对象类型的步骤略有不同的过程。

  • 可以定义表和索引选项。

  • 可以向角色中添加用户。

  • 可以定义全文目录。

  • 可以定义文件组和文件。

修改数据库对象或服务器对象:您可以修改服务器项目或数据库项目中对象的定义。 也可以修改这些对象的对象级别 SET 选项。

从数据库项目或服务器项目中移除对象:可以从数据库项目或服务器项目中删除对象,以将其永久移除。 还可以临时排除仍在开发中的对象。

自定义数据库对象和服务器对象的模板:可以查看和修改在创建数据库对象和服务器对象时使用的模板。

排除问题:可以详细了解有关如何排除数据库项目和服务器项目的常见问题。

对象定义

数据库对象和服务器对象是在项目文件夹中存储的 .sql 文件集合中定义的。 大多数对象都是在单独的文件中定义的。 例外情况包括表中的列和存储过程或函数的参数。 列是在包含表定义的文件中指定的,参数是在包含存储过程或函数的文件中指定的。

.sql 文件的**“生成操作”属性指示是否对 .sql 文件进行分析,以验证它是否包含数据库对象的定义。 默认情况下,包含数据库对象定义的文件设置为“生成”,而其他 .sql 脚本和杂项文件设置为“不在生成中”**。 **“生成操作”**属性还确定生成脚本中是否包含该文件。

每个对象的名称确定其文件名,对象的类型确定其默认文件扩展名。 例如,函数位于名为“对象名称.function.sql”的文件中,存储过程位于名为“对象名称.proc.sql”的文件中。

解决方案资源管理器和架构视图中的对象

在**“解决方案资源管理器”中,可以处理项目包含的文件和包含对象定义的文件。 不能在“解决方案资源管理器”中使用重命名重构。 当要处理文件,例如要将项目签入版本控制时,使用“解决方案资源管理器”**。

在**“架构视图”中,可以处理数据库对象。 当处理对象而不是处理包含对象定义的文件时,使用“架构视图”。 例如,可以使用“架构视图”**创建数据库对象。

对象名解析

通常,用来解析对象名的规则应当与 SQL Server 使用的规则相同。 某些 sysobject 可能需要完全限定才能正确解析。 如果出现错误,或者您在涉及到未完全限定的对象名时注意到异常行为,则应当通过完全限定对象名来尝试解决该问题。

在对象定义中引用数据库名称

可以在数据库项目的对象定义脚本中使用 $(databasename) 标记,但存在以下限制:

  • 必须将该标记括在方括号中,如下面的示例所示:

    [$(databasename)]

  • 不能使用该标记来指定由三部分组成的名称,如下面的示例所示:

    [$(databasename)].[dbo].[Table1]

下面的示例演示如何在存储过程中使用 $(databasename) 标记:

CREATE PROCEDURE [dbo].[MyProcedure]
@param1 INT = 0,
@param2 INT
AS
ALTER DATABASE [$(databasename)]
MODIFY FILEGROUP [FileGroup1] DEFAULT
RETURN 0

对象级别的 SET 选项

除了可以为数据库项目设置的 SET 选项之外,还可以为各个数据库对象的两个选项指定值。 这两个选项是 ANSI Null 和带引号的标识符。 默认情况下,每个对象的 SET 选项与数据库项目的 SET 选项匹配。 可以将这两个选项设置为项目默认值、“开启”或“关闭”。 生成数据库项目时,只将未设置为项目默认值的对象级别的 SET 选项编入生成脚本。

提示

使用“导入脚本”或“导入数据库架构”命令时,不为各个数据库对象导入 SET 选项的值。 必须在“属性”窗口中设置这些值。 有关更多信息,请参见如何:指定对象级 SET 选项

对象验证

当保存对已创建或修改的数据库对象的更改时,验证将发生。 对象定义中的任何错误都会显示在**“错误列表”窗口中。 如果双击错误消息,会打开对象定义,这样您可以更正错误。 包含错误的数据库对象在“架构视图”**中它们的图标上显示一个红色的感叹号。

提示

如果使用的版本不支持数据库对象,则该对象的图标上显示一个黄色的倒三角形。

有关如何解决数据库对象问题的更多信息,请参见关于数据库项目、生成和部署问题的疑难解答

相关方案

请参见

概念

生成数据库并将其部署到临时或生产环境中

生成数据库并将其部署到独立开发环境中

重命名对数据库对象的所有引用

编写和更改数据库代码