Преобразование типов аргументов хранимых процедур SQL Server - PullRequest
2 голосов
/ 22 октября 2008

Предположим, у меня есть несколько полей varchar (6000) в таблице, и я хочу изменить их на текстовые поля. Каковы последствия хранимых процедур, аргументы которых имеют тип varchar (6000). Каждой хранимой процедуре также нужно изменить эти типы данных аргумента?

Ответы [ 4 ]

4 голосов
/ 22 октября 2008

Текстовые поля устарели в SQL Server 2005 и выше. Вы должны использовать varchar (MAX), если это возможно. Если вы ожидаете, что в качестве аргументов ваших хранимых процедур будет передано более 6000 символов, вам также потребуется их изменить.

2 голосов
/ 22 октября 2008

Текстовые поля грубые для работы в SQL Server. На самом деле вы не можете объявлять локальные переменные типа text (кроме как параметров для хранимой процедуры), и большинство функций обработки строк больше не работают с текстовыми полями.

Также, если у вас есть триггеры, текстовые поля не появятся в таблицах INSERTED или DELETED.

В основном, если поле просто содержит данные из программы, и вы не манипулируете ими, то нет ничего страшного. Но если у вас есть хранимые процедуры для работы со строкой, тогда ваша задача будет намного сложнее.

Как упомянул tvanfosson, если у вас в SQL Server 2005 используется VARCHAR (MAX), вы получаете длину текстового поля с возможностью манипулировать им, как будто это VARCHAR.

1 голос
/ 22 октября 2008

Другие ответы верны, но они не отвечают на ваш вопрос. Varchar (макс) это путь. Если вы сделали feilds varchar (max) / text, но сохранили сохраненные аргументы proc одинаковыми, то любое поле, входящее через хранимый proc, будет усечено до 6000 символов. Поскольку вы говорите, что оно никогда не превысит этого, вы будете в порядке, пока, конечно, это не так. Это не выдает ошибку. Он просто усекается.

Я не уверен в точном поведении текста стихов varchar (max), но я уверен, что, как только вы начнете помещать их в одну таблицу, вы можете получить сумасшедшие хиты производительности. Почему так много больших полей в одной таблице?

0 голосов
/ 22 октября 2008

Причиной использования текстового поля является то, что все поля varchar (6000) в одной строке превышают максимальную длину строки. Текстовые поля просто хранят указатель в строке, поэтому максимальная длина строки SQL Server не превышает 8000. ATM база данных не может быть нормализована. Данные не обрабатываются хранимыми процедурами, они просто вставляются, обновляются и удаляются.

VARCHAR (MAX) ведет себя как текстовое поле и сохраняет только указатель на данные в строке?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...