某些第三方软件使用“登台”表进行各种导入,因此我们尝试导入的任何内容都可以通过其业务逻辑进行验证。系统中的任何表都可以是目标,标准做法是将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'
有点猜测这是不可能的,但我想我会问。
答案 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