我想让Kode_Barang
7个角色与第一个角色必须' B'剩下的字符必须是数字[1-9]
我为此创建了Kode_Barang查询:
Kode_Barang CHAR(7) PRIMARY KEY CHECK(LEN(Kode_Barang)=7 AND LEFT(Kode_Barang,1)='B' AND SUBSTRING(Kode_Barang,2,6)LIKE '[0-9]' )
但在我插入一些像这样的值之后:
INSERT INTO Barang (Kode_Barang, Nama_Barang, Satuan, Harga, Stock)
VALUES('B000001', 'Mie Goreng', 'Biji', 2500, 56)
Kode_Barang
发生错误。
有什么不对吗?请查看带有检查约束的SQL查询。
注意另一个参考:
Nama_Barang VARCHAR(25) UNIQUE NOT NULL,
Satuan VARCHAR (10) CHECK(Satuan = 'Buah' OR Satuan = 'Biji' OR Satuan = 'CM' OR Satuan = 'KG' OR Satuan = 'DUS' OR Satuan = 'Lusin'),
Harga MONEY NOT NULL CHECK(Harga != 0)
Stock INT NOT NULL CHECK(Stock > -1)
由于
我已经尝试过'%[^ 0-9]%'但结果仍然相同
我得到像这样的参考 How can I use LEFT & RIGHT Functions in SQL to get last 3 characters?
我的数据类型为CHAR
而不是VARCHAR
。
我改变了这样的代码:
Kode_Barang CHAR(7) PRIMARY KEY
CHECK(LEN(Kode_Barang) = 7
AND SUBSTRING(CAST(Kode_Barang AS VARCHAR(7)), 1, 1) = 'B'
AND SUBSTRING(CAST(Kode_Barang AS VARCHAR(7)), 2, 6) LIKE '%[^0-9]%' ),
但仍然相同
错误:
Msg 547,Level 16,State 0,Line 44
INSERT语句与CHECK约束" CK__Barang__Kode_Bar__5441852A"冲突。冲突发生在数据库" Studi_Kasus_Kelompok",table" dbo.Barang",column' Kode_Barang'。
由于
答案 0 :(得分:1)
我说你的SUBSTRING(Kode_Barang, 2, 6) LIKE '[0-9]'
是错的。 LIKE '[0-9]'
将与单个数字进行比较。也许尝试类似的事情:
... SUBSTRING(Kode_Barang, 2, 6) NOT LIKE '%[^0-9]%' ...
...检查结果字符串中的是否 数字。
答案 1 :(得分:1)
您的CHECK
约束应该是:
CHECK(Kode_Barang LIKE 'B[0-9][0-9][0-9][0-9][0-9][0-9]')
这意味着Kode_Barang
应该是以B
开头的7个字符,其余字符是数字。