如何在 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);

db<>fiddle