Apparantly вы все еще не из леса. Поэтому я оставлю вас с примером.
Создать тип TABLE
:
CREATE TYPE dbo.document_ids AS TABLE (
document_id BIGINT
);
GO
Если вы можете гарантировать, что только отдельные document_id
значения будут переданы в качестве параметра, вы можете извлечь выгоду из определения первичного ключа на document_id
поле:
CREATE TYPE dbo.document_ids AS TABLE (
document_id BIGINT PRIMARY KEY
);
GO
Создание функций, зависящих от что 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
Использование обеих функций:
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);
Надежда, что делает его более понятным для вас.
Исследование ** T ** возможно ** V ** alued ** P ** arameters онлайн. –
Любой пример ссылки, пожалуйста, для этого конкретного сценария? – AskMe
Все сценарии - это те же tbh. Если вам нужно передать список значений в качестве параметра функции или SP, используйте TVP. Это общий совет. Многое, что можно найти в Интернете, если вы ищете 'sql server table value parameter'. GL! –