列值作为存储过程输入

时间:2018-06-25 07:36:49

标签: sql-server tsql stored-procedures

为SP输入参数时,我有以下代码:

USE [MDAmanager]
GO

DECLARE @return_value int

EXEC    @return_value = [dbo].[spCougarExport]
        @PropertyCodeString = NULL,
        @Date = NULL,
        @InferDate = NULL,
        @TransactionCodeString = NULL

SELECT  'Return Value' = @return_value

GO

对于@PropertyCodeString,我想传递带有所有属性代码的单独表中的值。

下面是属性代码的示例

enter image description here

我要实现的目标是让SP始终返回所有属性,并且在添加新属性时不需要更新属性代码。

我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

假设您能够修改SP,则可以使用用户定义的表类型,例如

CREATE TYPE [dbo].[PropertyCode_UDT] AS TABLE
(   [PropertyCode] [bigint] NOT NULL
)
GO

DECLARE @PCTab [dbo].[PropertyCode_UDT]
;

INSERT INTO @PCTab
(   [PropertyCode]
)
SELECT PC.[PropertyCode]
FROM [dbo].[PropertyCode] PC
;

DECLARE @return_value int

EXEC    @return_value = [dbo].[spCougarExport]
    @PropertyCode  = @PCTab,
    @Date = NULL,
    @InferDate = NULL,
    @TransactionCodeString = NULL
;

您的Sp需要进行修改以接受@PropertyCode的正确类型,您只需在此表的SP内加入查询即可获取所有属性代码

例如

CREATE PROCEDURE [dbo].[spCougarExport]
    @Date [date]
,   @InferDate [date]
,   @TransactionCodeString [nvarchar] (MAX)
,   @PropertyCode PropertyCode_UDT READONLY
AS BEGIN;
.......
SELECT ...
FROM @PropertyCode atPC