Sql-Server

將欄位設置為具有另一個的預設值

  • May 17, 2019

我正在嘗試使用以下語法創建觸發器,但是 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';

最後一種方法更複雜,對列有依賴關係。在執行重命名之前,您需要刪除或更新它們。

引用自:https://dba.stackexchange.com/questions/131863