Сохранить пустую строку в таблице

У меня есть веб-сайт с формой, полной настроек, где каждый из входов сохраняет значение в базе данных MS SQL.

Но когда я установил для поля значение '', я получил следующее сообщение об ошибке: "Неверный поток протокола удаленного вызова процедур (RPC) входящего потока табличных данных (TDS). Параметр 3 (""): тип данных 0x00 неизвестно."

Мой сервис node.js вызывает хранимую процедуру, которая выглядит так:

CREATE PROCEDURE [dbo].[ckd_Configurations_Update]
@Key NVARCHAR(256),
@Value NVARCHAR(MAX)
AS
BEGIN
  UPDATE [dbo].[ckd_Configurations] SET [Value]=@Value WHERE [Key]=@Key;
END

Моя таблица:

CREATE TABLE [dbo].[ckd_Configurations]
(
    [Key] NVARCHAR(256) NOT NULL PRIMARY KEY,
    [Value] NVARCHAR(MAX)
)

И, наконец, мой маршрут node.js для установки конфигураций:

router.post('/configurations/update', function (req, res) {
    var request = new sql.Request(databaseConnection);
    var configuration = req.body;
    request.input('Key', sql.NVarChar(256), configuration.Key);
    request.input('Value', sql.NVarChar(sql.MAX), configuration.Value);

    request.execute('ckd_Configurations_Update', function (error, recordsets) {
        if (error) {
            res.json(new apiResponse(false, error.message));
        } else {
            res.json(new apiResponse(true, '', recordsets[0]));
        }
    });
});

person Michael Malura    schedule 18.02.2015    source источник
comment
Попробуйте изменить NVarchar(MAX) на некоторую фиксированную длину, например «NVarchar (4000)», и проверьте, работает ли она.   -  person Nilesh    schedule 18.02.2015
comment
@ Нилеш, это не сработало. получить ту же ошибку. я не понимаю, почему он говорит параметр 3...   -  person Michael Malura    schedule 18.02.2015
comment
Можете ли вы выполнить хранимую процедуру напрямую с этими значениями? из студии управления?   -  person Nilesh    schedule 18.02.2015
comment
@Nilesh да, это работает без проблем: ckd_Configurations_Update 'ReceiptFooter', '' (затронуты 1 строка)   -  person Michael Malura    schedule 18.02.2015


Ответы (2)


Просто обновите mssql до версии 2.0. Проблема была исправлена ​​в этом выпуске.

person Patrik Šimek    schedule 18.02.2015

Если я правильно понял ваш вопрос, вы хотите иметь возможность вставлять пустую строку в базу данных?

РАЗРЕШИТЬ «NULL» в столбце «Таблица против значения». Так что это нулевое значение может быть установлено для него. В хранимой процедуре поставьте условие:

IF @Value = ''
BEGIN
    SET @Value = NULL
END

Если вы хотите вернуть значение в виде пустой строки, вы можете использовать это в операторе SELECT.

Select isnull(Value, '') as Value from [ckd_Configurations]

Установите фиктивное значение в поле как «-1», а затем проверьте это в своей хранимой процедуре и установите для него значение NULL. Я думаю, что проблема здесь в том, что ваш сервис не принимает пустую строку, которая вызывает проблему. В хранимой процедуре также можно установить

@Value NVARCHAR(MAX) = NULL
person Sorrel Vesper    schedule 18.02.2015
comment
Некоторые из этих настроек являются необязательными. Поэтому я хочу «очистить» их. Для этого я удаляю все в поле ввода. Когда я нажимаю «сохранить», я получаю сообщение об ошибке сверху. Вот что я имею в виду под «вставить пустую строку». - person Michael Malura; 18.02.2015
comment
Я понимаю. Ваша проблема в том, что когда вы отправляете ввод в базу данных, вы получаете эту ошибку? Позвольте мне отредактировать мой ответ! - person Sorrel Vesper; 18.02.2015