【问题标题】:Sql Query error in check statement检查语句中的Sql Query错误
【发布时间】:2017-03-23 13:23:05
【问题描述】:

我必须在 Dept 上定义一个表约束,以确保所有经理的年龄 > 30。 我是初学者,所以我不想使用用户定义的函数。 在这里,我想要一个简单的解决方案。这可以应用我的 check in create table 语句。 我想使用检查语句或断言语句。

create table emp(eid int primary key,ename varchar(20),age int,salary real CHECK (salary >= 10000));
create table dept(did int primary key, buget real,managerid int foreign key (managerid) references emp check ((select eid from emp where age >30)));

它给出以下错误我不知道为什么

Msg 156, Level 15, State 1, Line 54
Incorrect syntax near the keyword 'select'.
Msg 102, Level 15, State 1, Line 54
Incorrect syntax near ')'.

我正在使用 Microsoft sql management studio 2014。

告诉我哪里做错了。 谢谢!

【问题讨论】:

标签: sql sql-server relation


【解决方案1】:

您可以在没有 UDF 的情况下执行此操作。您可以使用外键约束和计算列。

create table emp (
    eid int primary key,
    ename varchar(20),
    age int,
    salary real CHECK (salary >= 10000),
    manager_eligible as (case when age > 30 then 1 else 0 end),
    unique (manager_eligible, eid)
);

create table dept(
    did int primary key,
    buget real,
    managerid int,
    manager_eligible as (1),
    foreign key (manager_eligible, managerid) references emp(manager_eligible, eid)
);

我应该补充一点,UDF 通常会减慢速度。因此,能够使用外键执行此操作还应该使插入和更新更快。

【讨论】:

  • 你能提供一个带支票的解决方案吗?
  • 这是一种使用带有外键的计算列的有趣方式。很漂亮。
【解决方案2】:

您可以创建用户定义函数。看看 看看:Can a Check constraint relate to another table?Sub queries in check constraint

【讨论】:

    猜你喜欢
    • 2014-01-12
    • 1970-01-01
    • 2017-04-23
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    相关资源
    最近更新 更多