请各位帮忙解释下这段SQL语句

来源:百度知道 编辑:UC知道 时间:2024/05/07 04:10:50
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[JudgeProblem]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[JudgeProblem](
[ID] [int] IDENTITY(1,1) NOT NULL,
[CourseID] [int] NOT NULL,
[Title] [varchar](1000) NOT NULL,
[Answer] [bit] NOT NULL,
CONSTRAINT [PK_JudgeProblem] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
以上这段,请详细解释其中的每个关键词如“AND type in (N'U'))”、“WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]”以及“ON [PRIMARY]”
顺便问一下,一般创建表的格式都和这段差不多吗?
请给位详细解释一下,在下菜鸟,如第一行"SET ANSI_NULLS ON"什么意思,第三行的"SET QUOTED_IDENTIFIER ON"什么意思

IGNORE_DUP_KEY = OFF
唯一索引键 = 关闭
唯一索引键:在创建该索引时可以指定 IGNORE_DUP_KEY 子句,使得只有重复的键值才被拒绝,而非重复的键值将被添加。
SET ANSI_NULLS ON,SET QUOTED_IDENTIFIER ON,一般不怎么用吧。是SQL-92 设置语句。
SET ANSI_NULLS ON:在对空值进行等于 (=) 或不等于 (<>) 比较时取值为 FALSE。当 SET ANSI_NULLS 为 ON 时,即使 column_name 中包含空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。即使 column_name 中包含非空值,使用 WHERE column_name <> NULL 的 SELECT 语句仍会返回零行。
SET QUOTED_IDENTIFIER ON:SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SET QUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须符合所有 Transact-SQL 标识符规则
ON [PRIMARY]:设置主键。

上面是判断表的存在性用的 AND type in (N'U') 意思是用户建立的表
IGNORE_DUP_KEY 指定对唯一聚集索引或唯一非聚集索引的多行的意思
ON [PRIMARY] 是主键的意思

建表语句