如何在 SQL 服务器中的 CREATE TABLE 中定义可空且唯一的列?
How to define a nullable and unique column inside CREATE TABLE in SQL Server?
我有一个 table 定义如下:
CREATE TABLE MY_TABLE (
-- ...
MY_COLUMN VARCHAR(100) UNIQUE NOT NULL
)
然而,这个定义在多行中将 MY_COLUMN
作为 NULL
时会导致问题,因此我将其更改为:
CREATE TABLE MY_TABLE (
-- ...
MY_COLUMN VARCHAR(100)
)
CREATE UNIQUE INDEX uq_my_column_not_null
ON dbo.MY_TABLE(MY_COLUMN)
WHERE MY_COLUMN IS NOT NULL;
这解决了那个问题,但我需要在 CREATE TABLE
表达式之外创建一个约束,因为它不允许我将 WHERE
放在里面。
有没有办法在不在 CREATE TABLE
表达式之外编写代码的情况下获得此功能?类似于:
CREATE TABLE MY_TABLE (
-- ...
MY_COLUMN VARCHAR(100) UNIQUE ALLOW NULLS
)
是的,您可以在 CREATE
table 语句中创建一个索引(包括过滤的 UNIQUE
索引),但是您不能在列旁边定义它,您有具体定义 INDEX
:
CREATE TABLE dbo.MyTable (MyColumn varchar(100) NULL,
INDEX UQ_MyColumn UNIQUE (MyColumn) WHERE MyColumn IS NOT NULL);
我有一个 table 定义如下:
CREATE TABLE MY_TABLE (
-- ...
MY_COLUMN VARCHAR(100) UNIQUE NOT NULL
)
然而,这个定义在多行中将 MY_COLUMN
作为 NULL
时会导致问题,因此我将其更改为:
CREATE TABLE MY_TABLE (
-- ...
MY_COLUMN VARCHAR(100)
)
CREATE UNIQUE INDEX uq_my_column_not_null
ON dbo.MY_TABLE(MY_COLUMN)
WHERE MY_COLUMN IS NOT NULL;
这解决了那个问题,但我需要在 CREATE TABLE
表达式之外创建一个约束,因为它不允许我将 WHERE
放在里面。
有没有办法在不在 CREATE TABLE
表达式之外编写代码的情况下获得此功能?类似于:
CREATE TABLE MY_TABLE (
-- ...
MY_COLUMN VARCHAR(100) UNIQUE ALLOW NULLS
)
是的,您可以在 CREATE
table 语句中创建一个索引(包括过滤的 UNIQUE
索引),但是您不能在列旁边定义它,您有具体定义 INDEX
:
CREATE TABLE dbo.MyTable (MyColumn varchar(100) NULL,
INDEX UQ_MyColumn UNIQUE (MyColumn) WHERE MyColumn IS NOT NULL);