我有一个这样的数据表,一个程序就像这样填充数据,
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
);
然后我想将该数据传递给另一个存储过程,该存储过程将被定义为这样,
CREATE procedure [dbo].[ct_audit_oncost](
@table TABLE readonly,
@OutValue nvarchar(255) = null output
)
as
-- some stuff
go
我收集这是不可能的,因为我收到错误,
Incorrect syntax near the keyword 'TABLE'.
答案 0 :(得分:6)
自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
)
然后您可以在存储过程中使用它:
CREATE procedure [dbo].[ct_audit_oncost]
(
@table dbo.MyUDT readonly,
@OutValue nvarchar(255) = null output
)
as
-- some stuff
go
请注意,您还应该使用它来声明要发送到数据库的表:
DECLARE @Out nvarchar(255)
DECLARE @ClaimChanges as dbo.MyUdt
INSERT INTO @ClaimChanges (ColumnsList) VALUES (ValuesList)
EXEC ct_audit_oncost @ClaimChanges, @Out output