Apparantly vous êtes toujours pas encore sorti des bois. Je vais donc vous laisser un exemple.
Créer le type TABLE
:
CREATE TYPE dbo.document_ids AS TABLE (
document_id BIGINT
);
GO
Si vous ne pouvez garantir que seuls document_id
distinctes valeurs seront transmises en tant que paramètre, vous pouvez bénéficier de la définition d'une clé primaire sur le terrain document_id
:
CREATE TYPE dbo.document_ids AS TABLE (
document_id BIGINT PRIMARY KEY
);
GO
Créer des fonctions dépendantes ce type TABLE
, une valeur scalaire et une valeur table:
CREATE FUNCTION dbo.fn_doc_sv (
@doc_ids dbo.document_ids READONLY
)
RETURNS BIGINT
AS
BEGIN
RETURN (SELECT SUM(document_id) FROM @doc_ids);
END
GO
CREATE FUNCTION dbo.fn_doc_tv (
@doc_ids dbo.document_ids READONLY
)
RETURNS TABLE
AS
RETURN (SELECT document_id FROM @doc_ids);
GO
Utilisation des deux fonctions:
DECLARE @doc_ids dbo.document_ids;
INSERT INTO @doc_ids(document_id)VALUES(2949146),(2949148),(2949149),(14016926),(14025278),(14016928),(14016928),(14025280),(14025280);
SELECT dbo.fn_doc_sv(@doc_ids);
SELECT * FROM dbo.fn_doc_tv(@doc_ids);
espoir qui le rend clair pour vous.
Recherche ** T ** able ** V ** alued ** P ** aramètres en ligne. –
Un exemple de lien s'il vous plaît, pour ce scénario particulier? – AskMe
Tous les scénarios sont les mêmes tbh. Si vous devez transmettre une liste de valeurs en tant que paramètre à une fonction ou un SP, utilisez un point TVP. C'est le conseil général. Beaucoup de choses à trouver en ligne si vous recherchez «sql server table parameter parameter». GL! –