Могу ли я дать столбцу в представлении значение по умолчанию для вставок? - PullRequest
2 голосов
/ 08 ноября 2010

Некоторые сторонние программы используют «промежуточные» таблицы для различных импортов, поэтому все, что мы пытаемся импортировать, может быть проверено с помощью их бизнес-логики.Любая таблица в системе может быть целью, и стандартной практикой является назначение col1 в качестве «типа» импорта, который вы выполняете.

Все столбцы в таблице являются общими, т.е.«data1», «data2», «data3» и т. д.

Таким образом, col1 является назначенным столбцом «type» и будет иметь значение «ContactImport» или «ProductImport».Я бы на самом деле не хотел возвращать столбец «type» ... или, по крайней мере, переименовывать его в «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 ]

4 голосов
/ 08 ноября 2010

Вы можете определить свое представление, а затем (в SQL Server 2005 и более поздних версиях, и, вероятно, в других СУБД есть аналогичные структуры) создать триггер 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 голос
/ 08 ноября 2010

Вы можете использовать вместо триггера:

См .: http://msdn.microsoft.com/en-us/library/def01zh2(VS.90).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...