在 Sql 服务器中使用 "Sys" 前缀系统或一般 table 名称是否正常?
Does prefixing system or general table names with "Sys" fine in Sql Server?
在 Sql 服务器中有 sys 模式。 sys.Columns
、sys.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
的每个单独引用,无论是以 dbo
、sys
为前缀,还是根本没有,都引用了对象 sys.syscolumns
。我创建的 dbo.syscolumns
的(空)用户 table 的这些语句 returns 数据中没有一个。另请注意,在我创建该名称的 table 之前对 dbo.syscolumns
的引用也有效。
是的,您可以创建对象,但如果该名称已经作为 sys.sys{object}
对象存在,那么您将无法使用它。
除此之外,已经有一个对象sys.sysusers
,所以我们实际上已经有了答案;别这样,你们已经有冲突了。
完全同意@Larnu,我对这个答案投了赞成票。我再补充一个。
通过在所有 table 名称的前面放置一个前缀,您实际上损害了 table 搜索、排序和过滤的能力。它会减慢数据库的速度。它会损害 SSMS 行为和第 3 方工具。
不要这样做,但也不要用别的东西来做; tbl,选项卡,none 那个垃圾。
在 Sql 服务器中有 sys 模式。 sys.Columns
、sys.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
的每个单独引用,无论是以 dbo
、sys
为前缀,还是根本没有,都引用了对象 sys.syscolumns
。我创建的 dbo.syscolumns
的(空)用户 table 的这些语句 returns 数据中没有一个。另请注意,在我创建该名称的 table 之前对 dbo.syscolumns
的引用也有效。
是的,您可以创建对象,但如果该名称已经作为 sys.sys{object}
对象存在,那么您将无法使用它。
除此之外,已经有一个对象sys.sysusers
,所以我们实际上已经有了答案;别这样,你们已经有冲突了。
完全同意@Larnu,我对这个答案投了赞成票。我再补充一个。
通过在所有 table 名称的前面放置一个前缀,您实际上损害了 table 搜索、排序和过滤的能力。它会减慢数据库的速度。它会损害 SSMS 行为和第 3 方工具。
不要这样做,但也不要用别的东西来做; tbl,选项卡,none 那个垃圾。