我有一个像这样的数据表,一个程序将像这样填充数据,
DECLARE @ClaimChanges TABLE (
ChangeType NVARCHAR(10)
,contract_id int NOT NULL
,dispatch_id int NOT NULL
,dispatch_claim_id int NOT NULL
,item_no VARCHAR(100) NULL
,old_units VARCHAR(100) NULL
);
Run Code Online (Sandbox Code Playgroud)
然后我想将该数据传递给另一个存储过程,该存储过程将被定义为这样,
CREATE procedure [dbo].[ct_audit_oncost](
@table TABLE readonly,
@OutValue nvarchar(255) = null output
)
as
-- some stuff
go
Run Code Online (Sandbox Code Playgroud)
我收集这是不可能的,因为我收到错误,
Incorrect syntax near the keyword 'TABLE'.
Run Code Online (Sandbox Code Playgroud)
自2008版以来,支持表值参数.
但是,您不能只传递任何所需的表,首先需要定义用户定义的表类型:
CREATE TYPE dbo.MyUDT as TABLE
(
ChangeType NVARCHAR(10)
,contract_id int NOT NULL
,dispatch_id int NOT NULL
,dispatch_claim_id int NOT NULL
,item_no VARCHAR(100) NULL
,old_units VARCHAR(100) NULL
)
Run Code Online (Sandbox Code Playgroud)
然后,您可以在存储过程中使用它:
CREATE procedure [dbo].[ct_audit_oncost]
(
@table dbo.MyUDT readonly,
@OutValue nvarchar(255) = null output
)
as
-- some stuff
go
Run Code Online (Sandbox Code Playgroud)
请注意,您还应该使用它来声明要发送到数据库的表:
DECLARE @Out nvarchar(255)
DECLARE @ClaimChanges as dbo.MyUdt
INSERT INTO @ClaimChanges (ColumnsList) VALUES (ValuesList)
EXEC ct_audit_oncost @ClaimChanges, @Out output
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |