gpt4 book ai didi

sql-server - 必须声明表变量 "@table"吗?

转载 作者:行者123 更新时间:2023-12-05 08:56:29 24 4
gpt4 key购买 nike

所以这可能只是我对过程了解不够的问题,但我正在尝试制作一个过程来更新表中的列以删除尾随空格,因为这是我们最近工作中经常发生的事情。

这是因为我们正处于从旧系统到新系统的过渡阶段,所以我们也做了一个新的数据库来配合这个。旧数据库使用 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]: Must declare the table variable "@table".

我正在做的事情是不可能的吗?

最佳答案

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

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

关于sql-server - 必须声明表变量 "@table"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40257147/

24 4 0