2011-12-09 20 views
16

मैं एक सपा prc_Foo_Delete है जो निम्नलिखित हस्ताक्षर हैं में udtt पारित करने के लिए कैसे:एसक्यूएल सर्वर प्रबंधन में एक संग्रहीत प्रक्रिया स्टूडियो

CREATE TYPE [int_udtt] AS TABLE(
    [Id] [int] NOT NULL, 
    PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
)WITH (IGNORE_DUP_KEY = OFF) 
) 

मैं फोन करने की कोशिश की:

ALTER PROCEDURE [prc_Foo_Delete] 
    @fooIds [int_udtt] READONLY, 
    @deleteReason int, 
    @comment nvarchar(512), 
    @deletedBy nvarchar(128) 

int_udtt के रूप में परिभाषित है निम्नलिखित स्क्रिप्ट के साथ प्रबंधन स्टूडियो में यह एसपी:

DECLARE @return_value int 
EXEC @return_value = [prc_Foo_Delete] 
     @fooIds = 3, 
     @deleteReason = 2, 
     @comment = N'asfdasdf', 
     @deletedBy = N'asdfa' 

SELECT 'Return Value' = @return_value 
GO 

मुझे मिली त्रुटि है: ऑपरेंड टाइप सी लश: int int_udtt के साथ असंगत है। मैं इस टूल में कॉल करने के लिए int या int int की एक सूची में कैसे पास करूं (मुझे पता है कि कोड में इसे कैसे करें लेकिन प्रबंधन स्टूडियो में नहीं)।

उत्तर

35

चूंकि आपने संग्रहीत प्रक्रिया पर पैरामीटर के रूप में अपने उपयोगकर्ता परिभाषित प्रकार को परिभाषित किया है, इसलिए आपको का उपयोग करने की आवश्यकता है जो संग्रहीत प्रक्रिया को कॉल करते समय उपयोगकर्ता द्वारा परिभाषित प्रकार भी है! आप बस एक ही INT बजाय में नहीं भेज सकते हैं .... इस तरह

कोशिश कुछ:

-- define an instance of your user-defined table type 
DECLARE @IDs [int_udtt] 

-- fill some values into that table 
INSERT INTO @IDs VALUES(3), (5), (17), (42) 

-- call your stored proc 
DECLARE @return_value int 
EXEC @return_value = [prc_Foo_Delete] 
     @fooIds = @IDs, -- pass in that UDT table type here! 
     @deleteReason = 2, 
     @comment = N'asfdasdf', 
     @deletedBy = N'asdfa' 

SELECT 'Return Value' = @return_value 
GO 
संबंधित मुद्दे