SQL Server:对用户定义的表类型进行ltrim

时间:2016-06-04 11:20:09

标签: sql-server sql-server-2012 custom-data-type

我有一个SQL Server 2012用户定义的表类型,我用它来从PHP数组中获取数据并将该数据传递给过程。有时我从网络应用程序获得空白区域,我想使用ltrim / rtrim来清理它。我可以在用户定义的表类型级别执行此操作吗? IE:我声明它应该期待parm1 varchar(10)我可以以某种方式修剪吗?我没有运气。谢谢

示例,我的表类型如下所示:

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

我想更改它,以便当LocationName进入时,它将ltrim()/ rtrim()清除任何多余的空格。

1 个答案:

答案 0 :(得分:1)

我假设报告的问题与表值params的READONLY属性相关联,属性是必需的。这意味着表值params中的行无法更新/删除,也无法插入其他行。

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

永久解决方案应该是在将数据发送到SQL Server之前更新webapp(PHP)以删除这些空格。