SP作为计算列规范?

时间:2012-04-04 20:46:10

标签: sql-server-2008

我有以下SP

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

通过调用

为SQL插入提取应用程序管理的UID
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 

目前,应用程序(GIS)通过应用程序中的C#硬编码填充OBJECTID字段。我们需要绕过该逻辑,因为我们对插入的数据执行一些额外的操作,而它在插入到业务表之前驻留在添加表中。因此,我们现在的要求是使用SP或其他方法作为触发器或计算列规范,以使用下一个OID顺序填充OID字段。下一个OID由函数“dbo.i144_get_ids”管理,由于应用程序的体系结构,遗憾的是,我们无法在插入时使用该SP。这来自供应商文档: http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/in_SQL_Server/006z00000017000000/

1 个答案:

答案 0 :(得分:2)

您可以使用CROSS APPLY从函数创建列。你没有提到你的表格或你的查询,所以这是一个场景。如果您可以将SP重写为TVF,或者只使用该功能代替SP,则可以使用:

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