Does prefixing system or general table names with "Sys" fine in Sql Server?
In Sql Server there's sys Schema. sys.Columns
, sys.Tables
.
I have a general tables which I need to rename to SysUsers, SysRoles, etc.
Is it fine to do that? I will not use Sys schema. I just will prefix tables with Sys I find SQL Server itself do it generally
select * FROM SysColumns // NOTE its not sys.Columns
Solution 1:
TL;DR: Don't do this.
You will have name clashes and your objects will be unusable.
I strongly recommend against this. If you have any objects where the names clashes you will not be able to reference it.
Take this simple example:
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
Every single reference to syscolumns
, whether prefixed by dbo
, sys
, or not at all, references the object sys.syscolumns
. Not one of those statements returns data from the (empty) user table I created dbo.syscolumns
. Notice, as well, that the reference to dbo.syscolumns
before I create a table of that name also works.
Yes, you can create the objects, but if the name already exists as a sys.sys{object}
object, then you won't be able to use it.
Further to this, there is already an object sys.sysusers
, so we actually have the answer; don't do it, you already have a clash.