Значение таблицы Параметр ReadOnly Обходной путь - PullRequest
2 голосов
/ 06 января 2012

У меня есть 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 ]

0 голосов
/ 24 февраля 2015

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

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

    или

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

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

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

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

...