2015-10-19 3 views
0

Я хочу сделать Kode_Barang 7 символов с первым символом Must «B» и оставшийся символ должен быть номер [1-9]SQL сообщение сервера 547

У меня есть создать запрос для 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
The INSERT statement conflicted with the CHECK constraint "CK__Barang__Kode_Bar__5441852A". The conflict occurred in database "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]%' ... 

... который проверяет, чтобы увидеть, если любых символа в результирующей строке является не числовой.

+0

Я пробовал i, результат все тот же, я добавил ссылку в приведенном выше. спасибо Matt Gibson –

+0

Обратите внимание, что в моей версии я использую '* NOT * LIKE'. Вы отредактировали мой шаблон в своем вопросе, но не НЕ. –

1

Ваше CHECK ограничение должно быть:

CHECK(Kode_Barang LIKE 'B[0-9][0-9][0-9][0-9][0-9][0-9]') 

Это означает, что Kode_Barang должен точно быть 7 символов, начинающаяся с B, а остальные символы являются числами.

Смежные вопросы