2016-06-04 2 views
0

У меня есть определенные типы таблиц SQL Server 2012, которые я использую для получения данных из массива PHP и передачи этих данных в процедуру. Иногда я получаю белые пробелы из веб-приложения, и я хотел бы использовать ltrim/rtrim для его очистки. Могу ли я сделать это на уровне пользовательского типа таблицы? IE: где я заявляю, что он должен ожидать, что parm1 varchar (10) можно каким-то образом урезать? Мне не повезло. СпасибоSQL Server: ltrim по пользовательским типам таблиц

Например, моя таблица Тип выглядит следующим образом:

CREATE TYPE LocationTableType AS TABLE 
(LocationName VARCHAR(50) 
, CostRate INT); 
GO 

Я хочу изменить его так, что когда LocationName приходит, он будет LTrim()/RTRIM(), чтобы очистить любые дополнительные пробелы.

+0

Вы можете разместить несколько примеров вместо описания в терминах слов – TheGameiswar

+0

Использовать триггер [INSERT/UPDATE] (https://msdn.microsoft.com/en-us/library/ms189799.aspx), который будет LTRIM/RTRIM Местоположение. Альтернативой может быть использование [вычисленного столбца] (https://msdn.microsoft.com/en-us/library/ms188300.aspx). Сохраните имя местоположения в поле «LocationNameDirty» и получите вычисленный столбец «LocationName AS RTRIM (LTRIM (LocationNameDirty))». –

ответ

1

Я предполагаю, что сообщаемая проблема связана с READONLY свойство табличных значений, свойство, которое является обязательным. Это означает, что строки из параметров, зависящих от таблицы, не могут быть обновлены/удалены, а также мы не можем вставлять другие строки.

CREATE PROCEDURE dbo.DoSomething 
@list dbo.LocationTableType READONLY -- <-- table table param have to be READONLY 
AS 
BEGIN 
    SELECT * FROM @list 
END 

на короткий срок решение может быть

1), чтобы объявить другую переменную внутри хранимой процедуры

2) вставка обрезается данные в этой переменной, а затем

3), чтобы изменить следующие ссылки на все переменные - param на новую переменную.

ALTER PROCEDURE dbo.DoSomething 
@list dbo.LocationTableType READONLY 
AS 
BEGIN 
    DECLARE @listNoSpc dbo.LocationTableType -- New variable 
    INSERT @listNoSpc (LocationName, CostRate) -- Inserting trimmed data 
    SELECT LTRIM(l.LocationName), l.CostRate 
    FROM @list l 

    SELECT * FROM @listNoSpc     -- Update references from @list to @listNoSpc 
END 
GO 

Постоянное решение должно быть, чтобы обновить веб-приложение (PHP), чтобы удалить эти пробелы перед отправкой данных в SQL Server.