【问题标题】:Alter table variable to add primary key get error Incorrect syntax更改表变量以添加主键获取错误语法不正确
【发布时间】:2015-06-25 13:33:51
【问题描述】:

我想根据条件向定义的表变量添加复合主键约束:

DECLARE @tbl TABLE(Col1 int, Col2 int)

IF [myCondition] 
    ALTER TABLE  @tbl ADD CONSTRAINT c PRIMARY KEY(Col1)
ELSE 
    ALTER TABLE  @tbl ADD CONSTRAINT c PRIMARY KEY(Col1,Col2)

但是得到:

“@tbl”附近的语法不正确。

【问题讨论】:

  • 您不能像那样有条件地执行 ddl 语句,更不用说您的 alter 语句与声明的表变量的名称不同。如果您想这样做,则必须使用动态 sql。
  • ALTER TABLE 不允许用于表变量
  • 你可以用一个老式的#temp 表来完成这个......

标签: sql sql-server sql-server-2008 primary-key


【解决方案1】:

Alter 语句不能用于表变量。

作为替代方案,使用临时表:

CREATE TABLE #tbl (Col1 int not null, Col2 int not null)

IF [myCondition] 
    ALTER TABLE  #tbl ADD CONSTRAINT c PRIMARY KEY(Col1)
ELSE 
    ALTER TABLE  #tbl ADD CONSTRAINT c PRIMARY KEY(Col1,Col2)

【讨论】:

  • 已编辑,列必须定义为“not null”才能将它们添加为 PK。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多