Sql 签入创建表中的通配符作为字符串
我创建了一个存储员工记录的info表,SQL查询如下所示Sql 签入创建表中的通配符作为字符串,sql,string,character,wildcard,Sql,String,Character,Wildcard,我创建了一个存储员工记录的info表,SQL查询如下所示 CREATE TABLE info1 ( empid VARCHAR(8) PRIMARY KEY CONSTRAINT empchk CHECK (empid IN ('kh\%' ESCAPE '\''), initials CHAR(6), fname CHAR(25) NOT NULL, lname CHAR(25), userstatus INTEGER NOT NULL, de
CREATE TABLE info1 (
empid VARCHAR(8) PRIMARY KEY CONSTRAINT empchk
CHECK (empid IN ('kh\%' ESCAPE '\''),
initials CHAR(6), fname CHAR(25) NOT NULL,
lname CHAR(25),
userstatus INTEGER NOT NULL,
designation CHAR(10) NOT NULL
);
现在,正如您在empid
中看到的约束是kh%
其中-据我所知-%
意味着以下任意数量的字符(当然限制为8
)可以是任何字符,对吗
我正在使用Java DB,奇怪的是它将%
符号也作为字符串的一部分,因此如果我输入khce0001
,它会说empchk
违规,它只接受kh%
我该怎么办?为什么会发生这种情况?这个SQL查询中的错误是我在中使用了
,而不是像
那样使用(我相信它会进行通配符检查),所以
- 我放弃了对…的约束
ALTER TABLE info DROP CONSTRAINT empchk;
- 用…改变了桌子
ALTER TABLE info ADD CONSTRAINT empchk CHECK (empid LIKE ('kh%'));
- 因此正确的SQL查询应该是
CREATE TABLE info1 (
empid VARCHAR(8) PRIMARY KEY CONSTRAINT empchk
CHECK (empid LIKE ('kh%')),
initials CHAR(6),
fname CHAR(25) NOT NULL,
lname CHAR(25),
userstatus INTEGER NOT NULL,
designation CHAR(20) NOT NULL
);
很好,你能理解。考虑关闭这个问题