проверить соответствие пользовательскому типу (не таблице) на сервере sql - PullRequest
0 голосов
/ 12 февраля 2020

Можно создать пользовательский тип с проверкой constaint?

что-то вроде:

create type json from nvarchar(max) check isjson(value)=1

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Вы не можете определить пользовательский тип с ограничением, как вы упомянули. Вы можете определить тип таблицы со столбцами, содержащими ограничение CHECK. Чтение по CREATE TYPE

Если вы хотите определить тип столбца, как вы предлагаете, sp_bind может быть удален в будущем. Ссылка

Я бы предложил вам определить проверочное ограничение и использовать функцию Is JSon () в проверочном ограничении, как указано ниже:

CREATE TABLE TestJson
(
DocumentId BIGINT IDENTITY(1,1) PRIMARY KEY,
JsonText VARCHAR(max) CHECK (IsJson(JsonText) =1)
);
0 голосов
/ 13 февраля 2020

ОК, я могу добавить правило.

create rule json_rule
as
    isjson(@range) = 1

GO

CREATE TYPE dbo.[json] FROM nvarchar(max) NULL

GO

EXEC sys.sp_bindrule @rulename=N'[dbo].[json_rule]', @objname=N'[dbo].[json]' , @futureonly='futureonly'
...