2012-04-04 2 views
0

У меня есть следующий SPSP как вычисленная спецификация столбца?

create procedure dbo.i114_get_next_oid 
as 
begin 
DECLARE @id as integer 
DECLARE @num_ids as integer 
EXEC dbo.i144_get_ids 2, 1, @id output, @num_ids output 
SELECT @id as N'@base_id' 
end 
go 

, который тянет прикладной управляемый UID для SQL вставки по телефону

exec dbo.i114_get_next_oid 

Наших требований приложений выросло несколько, и мне интересно, как я мог используйте «exec dbo.i114_get_next_oid» в качестве спецификации вычисляемого столбца? Или противопоказание? Поцарапал мне голову. Благодаря!

Вот схема таблиц

CREATE TABLE [dbo].[TBL_VITAL_EVENTS](
    [Location_ID] [uniqueidentifier] NOT NULL, 
    [Event_ID] [uniqueidentifier] NOT NULL, 
    [OBJECTID] [uniqueidentifier] NULL, 
CONSTRAINT [PK_TBL_VITAL_EVENTS] PRIMARY KEY CLUSTERED 
(
    [Event_ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

ALTER TABLE [dbo].[TBL_VITAL_EVENTS] WITH CHECK ADD CONSTRAINT [FK_TBL_VITAL_EVENTS_GRSM_VITAL_SIGNS_PLOTS] FOREIGN KEY([Location_ID]) 
REFERENCES [dbo].[GRSM_VITAL_SIGNS_PLOTS] ([Location_ID]) 
GO 

ALTER TABLE [dbo].[TBL_VITAL_EVENTS] CHECK CONSTRAINT [FK_TBL_VITAL_EVENTS_GRSM_VITAL_SIGNS_PLOTS] 
GO 

ALTER TABLE [dbo].[TBL_VITAL_EVENTS] ADD CONSTRAINT [DF_TBL_VITAL_EVENTS_Event_ID] DEFAULT (newsequentialid()) FOR [Event_ID] 
GO 

В настоящее время приложение (ГИС) заполняет ObjectId поля через C# жестко закодирован в приложении. Нам нужно обойти эту логику, поскольку мы выполняем некоторые дополнительные операции над вставленными данными, пока она находится в таблице добавлений, прежде чем она будет вставлена ​​в бизнес-таблицу. Поэтому наше требование теперь либо использовать SP, либо какой-либо другой метод в качестве триггера или вычисленной спецификации столбца для заполнения поля OID последовательно с использованием следующего OID. Следующий OID управляется функцией «dbo.i144_get_ids», и из-за архитектуры приложения, к сожалению, мы не можем НЕ использовать этот SP для вставок. Это получено из документации поставщика: http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/in_SQL_Server/006z00000017000000/

ответ

2

Вы можете сделать столбец из функции, используя CROSS APPLY. Вы не указываете, как выглядит ваша таблица или ваш запрос, так что вот сценарий. Если вы можете переписать SP, чтобы быть TVF вместо этого, или просто использовать функцию вместо SP, вы можете использовать:

SELECT t.<fields>, fun.UID 
FROM MyTable t 
CROSS APPLY dbo.MyFunction(t.Inputfield, t.inputfield2) as Fun 
+0

столбец уже существует, не уверен, что если сделать еще один столбец будет решить эту проблему. Отредактированный исходный текст для уточнения. – tpcolson

Смежные вопросы