我有以下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插入提取应用程序管理的UIDexec 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/
答案 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