Sql-Server
將欄位設置為具有另一個的預設值
我正在嘗試使用以下語法創建觸發器,但是 SSMS 不斷向我咆哮並出現以下錯誤。
消息 208,級別 16,狀態 4,過程 test1,第 1 行
無效的對象名稱“data123”。
這是我的語法
CREATE TRIGGER test1 ON data123 AFTER UPDATE AS begin UPDATE data123 SET saledate = saledate1 FROM data123 INNER JOIN INSERTED i ON data123.id = i.id AND i.saledate1 is not null; end go
編輯
為清楚起見 - 我想要實現的是設置欄位=
saledate
不為空。saledate1``saledate1
如果有更好的方法來實現這一點,那麼
trigger
我願意接受建議:)編輯#2
我也試過這個語法
ALTER TABLE data123 ADD CONSTRAINT cst123 DEFAULT saledate1 FOR saledate;
但我得到一個錯誤
消息 128,級別 15,狀態 1,第 1 行
在此上下文中不允許使用名稱“saledate1”。此處僅允許使用常量、表達式或變數。不允許使用列名。
saledate 是一個用於多個 SSRS 等的欄位,當為 data123 創建數據庫等時,該欄位被錯誤地命名為 saledate1。現在嘗試重命名它是不可行的,因為多個元素已經綁定到它。因此,為了將 data123 包含在 SSRS 中,我需要欄位 saledate 來保存 saledate1 的值
編輯#3
這是範例 DDL,希望能闡明我的問題是什麼以及我想要的輸出。
Create Table test1 ( uqID int IDENTITY(1,1) PRIMARY KEY, itemsold varchar(400), saledate1 date, saledate date ) Insert Into test1 (itemsold, saledate1) Values ('tree', '03/01/2016') ,('flower', '02/11/2016') ,('chair', '02/25/2016') Select * from test1
因此,如果您執行上述語法,這就是您的輸出
uqID itemsold saledate1 saledate 1 tree 3/1/2016 2 flower 2/11/2016 3 chair 2/25/2016
我想要的輸出(這就是我最初認為觸發器的原因)是這個
uqID itemsold saledate1 saledate 1 tree 3/1/2016 3/1/2016 2 flower 2/11/2016 2/11/2016 3 chair 2/25/2016 2/25/2016
對於使saledate與**saledate1相同的一次性更新:
UPDATE dbo.test1 SET saledate = saledate1;
您也可以使用計算列來執行此操作。這將確保saledate始終與saledate1匹配(即使數據發生更改):
-- Drop the existing column ALTER TABLE dbo.test1 DROP COLUMN saledate; -- Add it back as a computed column ALTER TABLE dbo.test1 ADD saledate AS saledate1;
第三種選擇是刪除 saledate,然後重命名 saledate1 列:
-- Drop the existing column ALTER TABLE dbo.test1 DROP COLUMN saledate; -- Rename saledate1 to saledate EXECUTE sys.sp_rename @objname = N'dbo.test1.saledate1', @newname = N'saledate', @objtype = 'COLUMN';
最後一種方法更複雜,對列有依賴關係。在執行重命名之前,您需要刪除或更新它們。