Sql server sp_使用变量列名重命名过程

Sql server sp_使用变量列名重命名过程,sql-server,tsql,variables,rename,sp-rename,Sql Server,Tsql,Variables,Rename,Sp Rename,我试图使用带有变量的sp_rename存储过程,因为我无法控制将列名更改为具有日期的Excel文件的源 我删除一个表,然后导入该表。然后,我想更改该表的列名,因此我使用架构查询来查找当前的列,以便使用sp_rename进行更改: 如果我像下面那样显式地键入它,它就会工作 USE ESS GO EXEC sp_rename 'dbo.serverinv_unix_system_assignments_staging.Hostname as of 8/26/2018','server_nam

我试图使用带有变量的sp_rename存储过程,因为我无法控制将列名更改为具有日期的Excel文件的源

我删除一个表,然后导入该表。然后,我想更改该表的列名,因此我使用架构查询来查找当前的列,以便使用sp_rename进行更改:

如果我像下面那样显式地键入它,它就会工作

 USE ESS
 GO

 EXEC sp_rename 'dbo.serverinv_unix_system_assignments_staging.Hostname as of 8/26/2018','server_name','COLUMN';
   GO
我在第一个代码集上得到的错误是

Msg 201,16级,状态4,程序sp_重命名,第0行[批次开始第2行] 过程或函数“sp_rename”需要未提供的参数“@newname”


哦,我知道你在那里做了什么-sp_重命名过程需要3个参数-

sp_rename[@objname=]'object_name',[@newname=]'new_name' [,[@objtype=]'对象类型']

但您传递的是一个恰好包含3个逗号分隔值的参数

那是行不通的。您需要向存储过程传递3个参数,而不是将所有信息连接到单个参数中:

SET @OldName = CONCAT(N'dbo.serverinv_unix_system_assignements_staging.' ,@ColName)

EXEC sp_rename @OldName, 'server_name', 'COLUMN'

请注意,为了可读性,我已将@TotalName重命名为@OldName。

存储过程sp_rename采用3个参数,执行方式与您的变量相同@NewName仅将赋值给第一个参数

        EXEC [sys].[sp_rename] @objname = N''  -- nvarchar(1035)
                             , @newname = NULL -- sysname
                             , @objtype = ''   -- varchar(13)
您的变量@NewName将作为@objname传入

我认为只要稍微调整一下你的代码,你就会得到想要的结果。在各自的变量中定义每个参数,并在执行存储过程时传递每个参数

        EXEC [sys].[sp_rename] @objname = @TheObjectThatNeedsChange
                             , @newname = @TheNewName
                             , @objtype = 'COLUMN'

@NewName变量的结果也位于“dbo.serverinv_unix_system_assignments_staging.Hostname截至2018年8月26日”、“server_name”和“COLUMN”下面;狗娘养的…我的任务中有一个额外的e导致了这个错误…谢谢大家
        EXEC [sys].[sp_rename] @objname = @TheObjectThatNeedsChange
                             , @newname = @TheNewName
                             , @objtype = 'COLUMN'