2011-12-09 37 views
16

Tôi có một SP prc_Foo_Delete trong đó có chữ ký sau đây:Làm thế nào để vượt qua udtt thành một thủ tục lưu trữ trong SQL Server Management Studio

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

int_udtt được quy định như:

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

Tôi cố gắng để gọi SP này trong Management Studio với tập lệnh sau:

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 

Lỗi tôi nhận được là: Loại toán tử c lash: int không tương thích với int_udtt. Làm thế nào để vượt qua trong một int hoặc một danh sách các int để gọi trong công cụ này (Tôi biết làm thế nào để làm điều đó trong mã nhưng không phải trong Management Studio).

Trả lời

35

Vì bạn đã xác định loại người dùng được xác định làm tham số trong quy trình đã lưu, bạn cần phải sử dụng sử dụng loại mà người dùng xác định khi gọi thủ tục được lưu! Bạn không thể chỉ gửi một đơn INT thay ....

Hãy thử một cái gì đó như thế này:

-- 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 
Các vấn đề liên quan