我正在尝试编写一个验证备份的存储过程。这是我到目前为止所做的。
我使用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]
当我尝试执行过程时,我的智能感知无法将过程挑选出来
任何见解都会有所帮助
但在我保存程序并再次检查后,文件更改为
[dbo].[verifyData]
…此外,当我试图执行过程时,我的智能感知无法将过程挑选出来
SQL Server DATABASE包含多个对象,如表、视图、存储过程、函数、索引、触发器。这些对象由一个名为SCHEMA的逻辑实体所拥有。
除非另有说明,否则所有对特定对象的Transact-SQL引用都可以是以下格式的四部分名称:[server_name].[database_name].[schema_name].object_name
。这种格式称为Four Parts Name
,您可以将其视为对象
的完整逻辑路径由四部分组成的名称在某种程度上相当于文件的完整路径,例如:C:Program FilesMicrosoft SQL ServerMSSQL15.SQL2019MSSQLDATAAdventureWorks2019.mdf
要在多服务器环境中唯一标识一个对象,您需要所有四个部分:服务器名称(1),数据库名称(2),模式名称(3)和对象名称(4)。
但是当我们在一个特定的数据库中工作时,我们通常使用两部分的名称(或者两部分的路径)。如果需要的话),其中包括schema和object的名称。例如:CREATE PROCEDURE MySchemaName.MySP
,或SELECT ColA FROM MySchemaName.MyTableName
由两部分组成的名称在某种程度上相当于文件的相对路径。例如,如果我们在文件夹:C:Program FilesMicrosoft SQL ServerMSSQL15.SQL2019MSSQL
,那么只能使用文件DATAAdventureWorks2019.mdf
的相对路径不幸的是,大多数人都很懒惰(或者不太了解),因此他们使用对象的名称而不使用SCHEMA的名称,就像你做的一样。创建存储过程时。这是格式不好的代码!
当你创建一个对象时,没有明确使用SCHEMA名称(就像你所做的那样),那么SQL Server使用默认模式作为该对象的所有者,即[dbo]
但是在我保存程序并再次检查之后,文件更改为
[dbo].[verifyData]
跑题:HIGHLY important!(1)我们不保存对象而是创建对象。这不是一个文件,而是一个存储过程。
注意!如果你想理解,你必须开始使用正确的短语。
答案很简单:
服务器使用了正确的格式:由两部分组成的名称[dbo].[verifyData]
-拥有存储过程的默认模式的名称+存储过程的名称
当我尝试执行过程时,我的智能感知无法选择过程
这发生,因为你没有开始的模式名。开始键入SCHEMA的名称,智能感知应该会找到SCHEMA名称。接下来添加。.
并开始键入存储过程名称,智能感知应该会在SCHEMA
总结(1)你应该总是使用至少两部分的名字(即使大多数人不这样做)
(2)你可以而且应该创建一个新的SCHEMA,并把数据库中的对象分组成一个逻辑组。要创建新的SCHEMA,您可以使用:CREATE SCHEMA [Customer]
。有关创建SCHEMA时的更多信息和选项,请查看此链接。