0

我有以下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/

4

1 回答 1

2

您可以使用CROSS APPLY. 您没有提及您的表格是什么样子或您对此的查询,所以这是一个场景。如果您可以将您的 SP 改写为 TVF,或者只使用该函数而不是 SP,您可以使用:

SELECT t.<fields>, fun.UID
FROM MyTable t
CROSS APPLY dbo.MyFunction(t.Inputfield, t.inputfield2) as Fun
于 2012-04-04T20:51:27.153 回答