在 Sql 服务器中使用 "Sys" 前缀系统或一般 table 名称是否正常?

Does prefixing system or general table names with "Sys" fine in Sql Server?

在 Sql 服务器中有 sys 模式。 sys.Columnssys.Tables。 我有一个通用表,我需要将其重命名为 SysUsers、SysRoles 等

这样做可以吗?我不会使用 Sys 模式。我只是将前缀表与 Sys 我发现 SQL 服务器本身通常会这样做

select * FROM SysColumns      // NOTE its not sys.Columns

TL;DR:不要这样做。

您将遇到名称冲突并且您的对象将无法使用。


强烈反对这样做。如果您有任何名称冲突的对象,您将无法引用它。

举个简单的例子:

USE master;
GO

CREATE DATABASE Sillytest;
GO

USE Sillytest;
GO

SELECT *
FROM syscolumns; 
GO

SELECT *
FROM dbo.syscolumns; 
GO
SELECT *
FROM sys.syscolumns; 

GO

CREATE TABLE dbo.syscolumns (ID int, ColumnName sysname);
GO

SELECT *
FROM syscolumns; 
GO

SELECT *
FROM dbo.syscolumns; 
GO
SELECT *
FROM sys.syscolumns; 
GO

USE master;
GO

DROP DATABASE Sillytest;
GO

syscolumns 的每个单独引用,无论是以 dbosys 为前缀,还是根本没有,都引用了对象 sys.syscolumns。我创建的 dbo.syscolumns 的(空)用户 table 的这些语句 returns 数据中没有一个。另请注意,在我创建该名称的 table 之前对 dbo.syscolumns 的引用也有效。

是的,您可以创建对象,但如果该名称已经作为 sys.sys{object} 对象存在,那么您将无法使用它。

除此之外,已经有一个对象sys.sysusers,所以我们实际上已经有了答案;别这样,你们已经有冲突了。

完全同意@Larnu,我对这个答案投了赞成票。我再补充一个。

通过在所有 table 名称的前面放置一个前缀,您实际上损害了 table 搜索、排序和过滤的能力。它会减慢数据库的速度。它会损害 SSMS 行为和第 3 方工具。

不要这样做,但也不要用别的东西来做; tbl,选项卡,none 那个垃圾。