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 フィールドに入力します。挿入されたデータがビジネス テーブルに挿入される前に、追加テーブルに存在する間、挿入されたデータに対していくつかの追加操作を実行しているため、そのロジックを回避する必要があります。そのため、次の OID を使用して OID フィールドを順番に入力するには、SP またはその他の方法をトリガーとして使用するか、計算列の指定を使用する必要があります。次の OID は関数 "dbo.i144_get_ids" によって管理されますが、アプリケーションのアーキテクチャにより、残念ながら挿入でその SP を使用することはできません。これは、次のベンダードキュメントから提供されています。

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 に答える