我有一个SQL Server 2012用户定义的表类型,我用它来从PHP数组中获取数据并将该数据传递给过程。有时我从网络应用程序获得空白区域,我想使用ltrim / rtrim来清理它。我可以在用户定义的表类型级别执行此操作吗? IE:我声明它应该期待parm1 varchar(10)我可以以某种方式修剪吗?我没有运气。谢谢
示例,我的表类型如下所示:
CREATE TYPE LocationTableType AS TABLE
( LocationName VARCHAR(50)
, CostRate INT );
GO
我想更改它,以便当LocationName进入时,它将ltrim()/ rtrim()清除任何多余的空格。
答案 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)以删除这些空格。