【问题标题】:Stored procedure for verifying backup用于验证备份的存储过程
【发布时间】:2021-11-25 09:28:46
【问题描述】:

我正在尝试编写一个用于验证备份的存储过程。这是我到目前为止所做的。

我已经用master来存储过程了。

USE [master]
GO
CREATE PROCEDURE verifyData @filename nvarchar(225)
AS
RESTORE VERIFYONLY FROM DISK = @filename;
GO
GO 

但在我保存程序并再次检查后,文件更改为

USE [master]
GO
/****** Object:  StoredProcedure [dbo].[verifyData]    Script Date: 05/10/2021 3:49:53 pm ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[verifyData] @filename nvarchar(225)
AS
RESTORE VERIFYONLY FROM DISK = @filename;

此处显示红色波浪线[dbo].[verifyData]

此外,当我尝试执行该程序时,我的智能感知无法选择该程序

任何见解都会有所帮助

【问题讨论】:

  • 在 SSMS 的顶部 Edit -> Intellisense -> Refresh Local Cache

标签: sql-server tsql stored-procedures


【解决方案1】:

但在我保存程序并再次检查后,文件更改为[dbo].[verifyData]...此外,当我尝试执行该程序时,我的智能感知无法选择该程序

SQL Server DATABASE 包含多个对象,例如表、视图、存储过程、函数、索引、触发器。这些对象归一个名为 SCHEMA 的逻辑实体所有。

除非另有说明,否则对特定对象的所有 Transact-SQL 引用都可以是以下格式的四部分名称:[server_name].[database_name].[schema_name].object_name。这种格式称为Four Parts Name,您可以将其视为对象的完整逻辑路径

四部分名称相当于文件的完整路径,例如:C:\Program Files\Microsoft SQL Server\MSSQL15.SQL2019\MSSQL\DATA\AdventureWorks2019.mdf

要在多服务器环境中唯一标识一个对象,您需要所有四个部分:服务器名称 (1)、数据库名称 (2)、架构名称 (3) 和对象名称 (4)。

但是当我们在一个特定的数据库中工作时,我们通常使用一个由两部分组成的名称(如果需要,也可以是两部分的“路径”),其中包括 SHEMA 和 OBHECT 的名称。例如:CREATE PROCEDURE MySchemaName.MySP,或SELECT ColA FROM MySchemaName.MyTableName

由两部分组成的名称在某种程度上等同于文件的相对路径。例如如果我们在文件夹中:C:\Program Files\Microsoft SQL Server\MSSQL15.SQL2019\MSSQL\ 那么 as 只能使用文件的相对路径DATA\AdventureWorks2019.mdf

不幸的是,大多数人都很懒惰(或不太了解),因此他们使用对象的名称而不使用 SCHEMA 的名称,只是您在创建存储过程时所做的这不是格式正确的代码!

当您创建对象而不显式使用 SCHEMA 名称(如您所做的那样)时,SQL Server 使用默认架构作为该对象的所有者,即 [dbo]

但在我保存程序并再次检查后,文件更改为[dbo].[verifyData]

非常重要! (1) 我们不保存对象而是创建对象。 (2) 这不是文件,而是存储过程。

注意!如果你想理解,你必须开始使用正确的短语。

答案很简单:

服务器使用正确的格式,即由两部分组成的名称[dbo].[verifyData] - 拥有存储过程的默认模式的名称 + 存储过程的名称

当我尝试执行该程序时,我的智能感知无法选择该程序

发生这种情况是因为您没有以 SCHEMA 名称开始。开始输入 SCHEMA 的名称,智能感知应该找到 SCHEMA 名称。接下来,您添加点. 并开始输入存储过程名称,智能感知应该在 SCHEMA 下找到该存储过程

总结

(1) 您应该始终使用至少由两部分组成的名称(即使我们大多数人不这样做)

(2) 您可以并且应该创建新的 SCHEMA 并将数据库中的对象分组到一个逻辑组中。要创建新的 SCHEMA,您可以使用:CREATE SCHEMA [Customer]For more information and option when you CREATE a SCHEMA, check this link.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 2021-11-01
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多