必须声明表变量"@table"?

Omn*_*Owl 1 t-sql sql-server stored-procedures sql-server-2012

所以这可能只是我对程序的了解不够,但我正在尝试创建一个更新表中的列以删除尾随空格的过程,因为它是我们最近在工作中经常出现的.

这是因为我们处于从旧系统到新系统的过渡阶段,因此我们还建立了一个新的数据库.旧数据库使用nvarchar nchar,这意味着即使您不使用所有插槽的字符,它也会用空格填充其余的插槽.在新数据库中虽然我们使用varchar所以我们想摆脱空白!

所以这非常方便:

UPDATE table SET column = LTRIM( RTRIM( column ) );
Run Code Online (Sandbox Code Playgroud)

所以我试图制作一个程序,因为我们必须偶尔使用它:

USE omitted
GO
CREATE PROCEDURE TrimTrailingSpaces
  @table  VARCHAR(50),
  @column VARCHAR(50)
AS
BEGIN
UPDATE @table
SET
    @column = LTRIM( RTRIM( @column ) );
END
GO
Run Code Online (Sandbox Code Playgroud)

但每当我尝试执行此操作时,我都会收到错误消息:

Msg 1087,Level 16,State 1,Procedure TrimTrailingSpaces,Line 6 [Batch Start Line 2]:必须声明表变量"@table".

我正在做什么是不可能的?

Aks*_*hat 5

USE omitted
GO
CREATE PROCEDURE TrimTrailingSpaces
  @table_name  VARCHAR(50),
  @column_name VARCHAR(50)
AS
BEGIN
declare @sql varchar(200);
set @sql='UPDATE ' + QUOTENAME(@table_name) 
     +' SET '+  @column_name+ ' = LTRIM( RTRIM( ' + QUOTENAME(@column_name) +' ) )';
END
GO
Run Code Online (Sandbox Code Playgroud)

你需要使用动态sql.表名不能作为UPDATE查询中的变量给出.还要将变量名称更改为SQL中的关键字以外的其他名