2017-01-25 22 views
0

当我试图做一个存储过程,这将使用变量调用sp_rename

  1. 删除主键
  2. 重命名,其中主键被设置
  3. 列名创建新的主键

我用点号2

我想柱与重命名挣扎与传递给存储过程是这样的参数:

EXEC sp_rename '[' + @SCHEMA + '].[' + @TABLE + '].[ID]' , 'Id', 'COLUMN' 

可是这样一来,我得到这个错误:

Procedure or function 'sp_RENAME' expects parameter '@newname', which was not supplied.

如何使用sp_rename带参数?

回答

1

尝试这样

DECLARE @SCHEMA NVARCHAR(30)='your schema name' 
DECLARE @TABLE NVARCHAR(30)='table Name' 
DECLARE @OLD NVARCHAR(30) = '[' + @SCHEMA + '].[' + @TABLE + '].[ID]' 
EXEC sp_rename @OLD, 'Id' 
1

的问题不在于sp_rename本身,它实际上是用EXEC问题。

对于要通过每个参数,可能会提供一个(字面某种),一个可变关键字DEFAULT。你可能不会通过的是表达式,它计算一个值。

[ { EXEC | EXECUTE } ] 
    { 
     [ @return_status = ] 
     { module_name [ ;number ] | @module_name_var } 
     [ [ @parameter = ] { value 
          | @variable [ OUTPUT ] 
          | [ DEFAULT ] 
          } 
     ] 
     [ ,...n ] 
     [ WITH <execute_option> [ ,...n ] ] 
    } 
[;] 

这一切都意味着,如果你想计算的东西,你需要做的是作为单独的声明(S),并存储在一个变量计算的结果是,EXEC之前,如图所示在JaydipJ's answer