在 Sql Server 中使用“Sys”作为系统或通用表名称前缀可以吗?

-1 database sql-server schema database-design database-administration

在 Sql Server 中有 sys Schema。sys.Columns, sys.Tables. 我有一个通用表,需要将其重命名为 SysUsers、SysRoles 等。

这样做可以吗?我不会使用 Sys 架构。我只是在表前加上Sys 我发现 SQL Server 本身通常会这样做

select * FROM SysColumns      // NOTE its not sys.Columns
Run Code Online (Sandbox Code Playgroud)

use*_*983 5

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
Run Code Online (Sandbox Code Playgroud)

对 的每个单独引用syscolumns,无论是否以dbo,为前缀sys,或者根本没有前缀,都引用该对象sys.syscolumns。这些语句没有一个从我创建的(空)用户表返回数据dbo.syscolumns。另请注意,dbo.syscolumns在创建该名称的表之前对它的引用也有效。

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

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