2017-08-10 16 views
0

我創建了下面的表格指定自定義的默認值生成函數:在SQL Server

CREATE TABLE [dbo].[Symptoms] 
(
    [Id]   INT   NOT NULL, 
    [description] NVARCHAR (128) NOT NULL, 
    [imgPath]  NVARCHAR (128) NOT NULL, 
    [diseaseId] INT NOT NULL, 
    [weight] FLOAT NOT NULL, 

    PRIMARY KEY CLUSTERED ([Id] ASC, [diseaseId] ASC) 
); 

我想要做的就是創建爲[imgPath]列的默認值。我知道DEFAULT newid()和其他方法,但我想要一個自定義生成的方法。

具體而言,我希望[imgPath]$"/resources/Images/{Id}_symptom.jpg",其中Id是該特定行的ID。

我在哪裏可以指定此功能?

謝謝!

回答

1

更新
無法使用其他列數據組成SQL Server中的列默認值。 你可以做的是另一列添加爲你指定的圖片路徑,並把它作爲計算列的聲明的一部分:

CREATE TABLE [dbo].[Symptoms] (
    [Id]   INT   NOT NULL, 
    [description] NVARCHAR (128) NOT NULL, 
    [UserDefinedImgPath]  NVARCHAR (128) NULL, 
    [imgPath] AS COALESCE(UserDefinedimgPath, '/resources/Images/' + CAST(Id AS NVARCHAR(13)) +'_symptom.jpg') PERSISTED, 
    [diseaseId] INT NOT NULL, 
    [weight] FLOAT NOT NULL, 
    PRIMARY KEY CLUSTERED ([Id] ASC, [diseaseId] ASC) 
); 

現在,當你想指定的插入或更新的圖像頁面,請使用UserDefinedImgPath列。當你想要默認值時,只需將其保留null
選擇圖像路徑時,請始終使用計算列。

先回答
使用computed columnimgPath

CREATE TABLE [dbo].[Symptoms] (
[Id]   INT   NOT NULL, 
[description] NVARCHAR (128) NOT NULL, 
[imgPath] AS '/resources/Images/' + CAST(Id AS NVARCHAR(13)) +'_symptom.jpg' PERSISTED, 
[diseaseId] INT NOT NULL, 
[weight] FLOAT NOT NULL, 
PRIMARY KEY CLUSTERED ([Id] ASC, [diseaseId] ASC) 
); 

請注意,您無法更新計算列,也可以插入一個特定的值給它。

+0

有沒有什麼辦法可以實現這個功能,只有當提供的值爲空時才能執行該功能 - 即能夠插入任何我想要的但有默認回退? –

+0

請參閱我編輯的答案。 –

0

要添加默認值,請創建默認約束,在SQL Server中的例子如下:

ALTER TABLE Symptoms 
    ADD CONSTRAINT Symptoms_imgPath 
    DEFAULT (('/resources/Images/{Id}_symptom.jpg')) FOR imgPath 

另一種方式是在插入時插入默認值,就像這樣:

INSERT INTO Symptoms 
    SELECT '/resources/Images/{Id}_symptom.jpg' 
    FROM symptoms 
    WHERE id = NEWID() 
+0

我不認爲頂級解決方案會插入字符串,因爲我想...它只會設置字符串文字爲默認值。我想{Id}替換爲特定症狀的ID –

+0

@Varun是否要替換「{Id}」,該ID是否帶有新ID? –

+0

是 - {Id}應該是該行症狀的標識 –