我最近看到一条推文,指出您可以SELECT * FROM TableName
通过以下方式构建表来阻止其他开发人员使用来从表中读取内容:
CREATE TABLE [TableName]
(
[ID] INT IDENTITY NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[DontUseStar] AS (1 / 0)
);
Run Code Online (Sandbox Code Playgroud)
很容易看到,使用SELECT *
此处会尝试将空白列名称读取为1除以0(从而导致除以零的错误),但没有为该列分配数据类型。
为什么SQL允许您创建一个没有分配数据类型的列,并且知道它的名称是非法的?