Ich habe eine gespeicherte Prozedur, die einige sich wiederholende Code ausführt, so dass ich beschlossen, den redundanten Code in eine Tabelle-bewertete Funktion zu machen. Das Problem, auf das ich stoße, ist:
Msg 137, Level 16, State 1, Procedure Search, Line 98
Must declare the scalar variable "@myTVP".
Ein einfaches Beispiel für den SQL-Code, den ich verwende, lautet:
CREATE TYPE [dbo].textTable_type AS TABLE(
[text] [nvarchar] (36)
)
CREATE FUNCTION dbo.Search_fn
(@myTVP AS textTable_type READONLY)
RETURNS TABLE
AS
RETURN
( SELECT * from @myTVP )
GO
CREATE PROCEDURE [dbo].[Search]
@myTVP AS textTable_type READONLY
AS
BEGIN
SELECT * FROM dbo.Search_fn(@myTVP)
END
GO
DECLARE @TVP as textTable_type
INSERT INTO @TVP VALUES ('abc')
INSERT INTO @TVP VALUES ('123')
exec dbo.Search(@myTVP = @TVP)
GO
DROP FUNCTION Search_fn
DROP PROCEDURE Search
Wenn jemand einen Einblick geben kann, wäre das wunderbar!
(Es gibt ein paar zusätzliche Fehler, wenn Sie versuchen, dieses Beispiel auszuführen, aber sie stammen von dem enthaltenen Fehler. Das Problem liegt darin, dass die gespeicherte Prozedur Search nicht erstellt werden kann.
Gracias.