cancel
Showing results for 
Search instead for 
Did you mean: 

ASE Case-insensitive primary key constraint over table insertions

Former Member
4,330

My situation is the following: suppose you have something like:

CREATE TABLE t1(
  mykey VARCHAR(255) primary key,
  myvalue VARCHAR(255)
);

Since Sybase is case-sensitive over the column values, something like this would be allowed:

INSERT INTO t1(mykey, myvalue) VALUES('key', 'value');
INSERT INTO t1(mykey, myvalue) VALUES('KEY', 'VALUE');

Result:

+-----+-------+
| key | value |
+-----+-------+
| KEY | VALUE |
+-----+-------+

I actually want to prevent this, and the second insertion should fail for duplicated key. Anyway, if I want to modify the value of any other column which is not primary key, for example from 'value' to 'VaLuE', I want to be able to do that, preserving the case insensitivity constraint only on the primary key.

This is possible on Oracle by creating an upper/lower case index on the table:

CREATE INDEX myindex ON t1(UPPER(mykey));

Anyway this doesn't seem to work on Sybase, since the duplicated-case insertion is still allowed.

I've found some hints around the web which would act on the DBMS configuration, through sp_configure/sp_text_configure, but I want to avoid such an intrusive solution, and apply the case sensitivity ONLY to some specific tables and ONLY on the primary keys of those tables, like I do on Oracle by creating the index through the syntax shown above.

Is this possible on Sybase?

Accepted Solutions (1)

Accepted Solutions (1)

justin_willey
Participant

Are you talking about SQL Anywhere? By default SQL Anywhere databases are case insensitive - so the insert you show would fail:


Re ASE Caseinsensitive primary key constraint over table insertions

If you have created a case sensitive database, you could would have to do something either with a check constraint on the table or possibly a trigger that would reject the insert.

Former Member
0 Kudos

Hi,

Thanks for your answer. Can you please provide me an example of possible trigger for implementing such a policy? (I think I would opt for this solution).

Thanks again,

-- Fabio

p.s. I know that using SQL Anywhere the insertion would fail, but I would like to have an all-purpose solution even in case of an external application which interfaces with Sybase through any driver.

justin_willey
Participant
0 Kudos

What version of SQL Anywhere are you using?

SELECT @@Version

will tell you.

Former Member
0 Kudos

Adaptive Server Enterprise/15.5/EBF 17340 SMP/P/x86_64/Enterprise Linux/ase155/2391/64-bit/FBO/Mon Nov 9 18:44:45 2009

MarkCulp
Participant
0 Kudos

You are not using SQL Anywhere; you are using ASE. This forum is for questions about SQL Anywhere. You are better off asking your question on one of the ASE forums - see http://www.sybase.com/detail_list?id=11507 for a list - perhaps sybase.public.ase.general (http://www.sybase.com/detail?id=1012843)?

Answers (0)