所以这可能只是我不了解过程的问题,但我正在尝试创建一个更新表中列的过程以删除尾随空格,因为它是我们最近在工作中经常出现的事。 / p>
这是因为我们处于从旧系统到新系统的过渡阶段,因此我们还建立了一个新的数据库。旧数据库使用 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”。
我正在做的事情是不可能的吗?
答案 0 :(得分:5)
scatterD3
您需要使用动态sql。表名不能作为UPDATE查询中的变量给出。还要将变量名称更改为SQL中的关键字以外的其他关键字。
答案 1 :(得分:1)
USE omitted
GO
CREATE PROCEDURE TrimTrailingSpaces
@table VARCHAR(50),
@column VARCHAR(50)
AS
BEGIN
declare @sql varchar(max)
set @sql='UPDATE '+@table+'
SET
'+@column+' = LTRIM( RTRIM( '+@column+' ) );
END'
execute(@sql)
end
go