Значение таблицы Параметр ReadOnly Обходной путь

У меня есть SProc с табличным параметром, @section типа dbo.SectionIn, Этот параметр используется в SProc, и я хотел бы удалить из него некоторые записи, но, конечно, он предназначен только для чтения.

The table-valued parameter "@sections" is READONLY and cannot be modified.

Мой план состоит в том, чтобы скопировать его содержимое в табличную переменную и использовать вместо этого.

DECLARE @sectionDups as dbo.SectionIn
    INSERT INTO @sectionDups
    SELECT *
    FROM @sections 

Мой вопрос: повлечет ли это какое-либо снижение производительности в плане Query, и если нет, то в чем причина требования ReadOnly?

2 ответа

Это приведет к снижению производительности из-за копирования таблицы: чем больше строк в таблице параметров, тем больше это снижает производительность, но если это может быть незначительным для общего запуска sp

AFAIK единственная причина только для чтения TVP - потому что это очень свежая функция в SQL Server и чтения-записи еще в стадии разработки, так что - будьте терпеливы

Не следует копировать переменную таблицы TVP в новую переменную таблицы. Если вы хотите исключить строки, выполните одно из следующих действий:

  1. Использовать WHERE предложение, чтобы отфильтровать нежелательные строки.

    или же

  2. Создать локальную временную таблицу (одиночную #) и скопируйте данные TVP к этому. Хотя для этого может потребоваться использование предложения WHERE, поэтому это не имеет большой ценности вне:

    • лучшая статистика для временной таблицы в отличие от табличной переменной (но с использованием уровня оператора OPTION (RECOMPILE) решает тот)
    • возможность добавлять столбцы
    • возможность изменять значения уже в TVP
Другие вопросы по тегам