【发布时间】:2017-03-08 12:24:18
【问题描述】:
所以这可能只是我对程序了解不够的问题,但我正在尝试制作一个更新表中的列以删除尾随空格的程序,因为这是我们最近工作中经常发生的事情。
这是因为我们正处于从旧系统到新系统的过渡阶段,所以我们也做了一个新的数据库来配合这个。旧数据库使用 nvarchar nchar,这意味着即使您不使用所有字符槽,它也会用空格填充其余槽。在新数据库中,虽然我们使用了 varchar,所以我们想去掉空格!
所以这很方便:
UPDATE table SET column = LTRIM( RTRIM( column ) );
所以我试着用它制作一个程序,因为我们必须偶尔使用它:
USE omitted
GO
CREATE PROCEDURE TrimTrailingSpaces
@table VARCHAR(50),
@column VARCHAR(50)
AS
BEGIN
UPDATE @table
SET
@column = LTRIM( RTRIM( @column ) );
END
GO
但每当我尝试执行此操作时,我都会收到错误:
Msg 1087,Level 16,State 1,Procedure TrimTrailingSpaces,Line 6 [Batch Start Line 2]:必须声明表变量“@table”。
我正在做的事情是不可能的吗?
【问题讨论】:
-
如何执行你的存储过程?
-
@MitchWheat 那么请解释一下为什么数据库中始终有空格,而我们不添加这些空格。
-
The old Database used nvarchar which means that even if you don't use all the slots for characters, it will fill the rest of the slots with spaces- 这不是nvarchar和varchar之间的区别!您正在考虑varchar和char或nchar和nvarchar之间的区别 -
不要从 nchar 改成 varchar,你应该把它改成 nvarchar
-
@Jamiec 提出了一个很好的观点。从 nChar 切换到 VarChar 可能会导致数据丢失。请考虑使用 nVarChar。这些数据类型的 n 个版本消耗更多存储空间,但支持更广泛的字符。有关差异的更多信息,请参阅此question。
标签: sql-server tsql stored-procedures sql-server-2012