-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 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,所以我们实际上有了答案;别这样做,你们已经发生冲突了。