2016-02-04 3 views
2

Если у меня есть столбец nvarchar в SQL Server 2012, как мне по умолчанию значение для GUID, когда значение равно null или пустое пространство?sql server как по умолчанию столбец nvarhcar для GUID, если он пуст или пуст

Чтобы быть более ясным: Мало того, он должен работать, когда люди делают:

INSERT INTO table(second_column) VALUES('test') 

Он также должен работать, если люди делают:

INSERT INTO table(column_with_default, second_column) VALUES('', 'test') 

Я попытался установить по умолчанию

LEFT (NEWID(), 36)

, но это не работает ...

Когда я вставить в таблицу с «NULL» для этого столбца, это просто NULL (то же самое с «»).

+0

Что вы имеете в виду настройки по умолчанию налево (NEWID(), 36) не работает ? Что происходит? – ZLK

ответ

1

EDIT 2: В соответствии с вашими комментариями я изменить мой ответ

CREATE TABLE dbo.Test(ID NVARCHAR(MAX) NOT NULL DEFAULT NEWID() 
       ,TestData NVARCHAR(MAX)); 
GO 
CREATE TRIGGER dbo.TestTrigger ON dbo.Test 
    INSTEAD OF INSERT 
AS 
BEGIN 
    INSERT INTO dbo.Test(ID,TestData) 
    SELECT CASE WHEN i.ID IS NULL OR i.ID='' THEN CAST(NEWID() AS NVARCHAR(MAX)) ELSE i.ID END,i.TestData 
    FROM inserted AS i; 
END 
GO 

INSERT INTO dbo.Test(ID,TestData) VALUES(NULL,'test with NULL'); 
INSERT INTO dbo.Test(ID,TestData) VALUES('','test with EMPTY'); 
INSERT INTO dbo.Test(ID,TestData) VALUES('abc','test with real data'); 

SELECT * FROM Test; 
GO 
DROP TABLE dbo.Test; 

Результат

69604546-47BD-4E0D-9924-FAD39054BFFD test with NULL 
D9F38DB0-1155-464B-89C7-43C2CE8381BF test with EMPTY 
abc          test with real data 
+0

См. Edit, Я знаю, что это работает –

+0

@AllenZhang, см. Мое редактирование. Мы оба печатали в то же время ... :-) – Shnugo

+0

Так есть путь к пустой пустой строке для GUID? –

0

Вы можете использовать NEWID() в Ограничении по умолчанию. Если поле недостаточно велико, используйте в качестве выражения ограничения значение LEFT(NEWID(),<field-length>).

Смежные вопросы