tutorial - Cómo pasar udtt a un procedimiento almacenado en SQL Server Management Studio
stored procedure sql tutorial (1)
Tengo un SP prc_Foo_Delete que tiene la siguiente firma:
ALTER PROCEDURE [prc_Foo_Delete]
@fooIds [int_udtt] READONLY,
@deleteReason int,
@comment nvarchar(512),
@deletedBy nvarchar(128)
int_udtt se define como:
CREATE TYPE [int_udtt] AS TABLE(
[Id] [int] NOT NULL,
PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)
Intenté llamar a este SP en Management Studio con el siguiente script:
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
El error que recibí es: Operand type clash: int es incompatible con int_udtt. ¿Cómo paso un int o una lista de int para llamar a esta herramienta (sé cómo hacerlo en código pero no en Management Studio)?
¡Ya que ha definido su tipo definido por el usuario como un parámetro en el procedimiento almacenado, también necesita usar ese tipo definido por el usuario al llamar al procedimiento almacenado! No puedes simplemente enviar una sola INT
lugar ...
Intenta algo como esto:
-- 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