我可以在视图中为列添加插入的默认值吗?

时间:2010-11-08 20:32:43

标签: tsql view

某些第三方软件使用“登台”表进行各种导入,因此我们尝试导入的任何内容都可以通过其业务逻辑进行验证。系统中的任何表都可以是目标,标准做法是将col1指定为您正在执行的导入的“类型”。

表中的所有列都是通用的,即。 “data1”,“data2”,“data3”等...

因此col1是指定的“type”列,并将设置为“ContactImport”或“ProductImport”。我不想实际返回“类型”列...或者至少将其重命名为“ImportType”。

所以我开始创建视图以更好地管理我们的导入/导出。但是,如果人们使用v_ContactImport视图并且必须手动将col1设置为“ContactImport”,那么它似乎容易出错?

有没有办法让视图给col1一个默认值。

由于我匆匆而不确定它有多清楚,这里是视图本身的一个快速示例:

CREATE VIEW v_ContactImport 
AS

SELECT data2 as FirstName,
       data3 as LastName,
       data4 as Phone       
FROM StagingTable
WHERE data1='ContactImport'

并且只想做

INSERT INTO v_ContactImport (FirstName, LastName, Phone)
VALUES ('Jack', 'Handey', '5555555555' )

那么如果我选择v_ContactImport该记录会回来因为data1会自动设置为'ContactImport'

有点猜测这是不可能的,但我想我会问。

2 个答案:

答案 0 :(得分:4)

您可以定义视图,然后(在SQL Server 2005及更高版本中,其他DBMS中可能存在类似的结构)创建一个INSTEAD OF触发器。从BOL剪切,粘贴和修改,它看起来像:

--Create an INSTEAD OF INSERT trigger on the view.
CREATE TRIGGER InsteadTrigger on v_ContactImport
INSTEAD OF INSERT
AS
BEGIN
  --Build an INSERT statement that adds in your column
  INSERT INTO StagingTable
       SELECT 'ContactImport', Col1, Col2, ColEtc
       FROM inserted
END
GO

答案 1 :(得分:1)

您可以使用而不是触发器:

请参阅:http://msdn.microsoft.com/en-us/library/def01zh2(VS.90).aspx