Bijan Farhoudi <[EMAIL PROTECTED]> writes: > A. Pagaltzis wrote: >> * Bijan Farhoudi <[EMAIL PROTECTED]> [2006-06-25 16:35]: >> >>> Thanks for your answer but still I am getting an error message: >>> sqlite> create table foo(i integer, [order] integer); >>> sqlite> .sch >>> CREATE TABLE foo(i integer, [order] integer); >>> sqlite> insert into foo values(1,2); >>> sqlite> select order from foo >>> ...> ; >>> SQL error: near "order": syntax error >>> >>> Any other idea? >>> >> >> .headers on >> SELECT [order] FROM foo >> > But how would you know the name of the col is "order" not "[order]"?
Surround ALL table and column names in square brackets when you reference them, and that should eliminate the confusion. sqlite> CREATE TABLE [foo] ([i] INTEGER, [order] INTEGER); sqlite> INSERT INTO [foo] VALUES (1,2); sqlite> .mode line sqlite> SELECT [order] FROM [foo]; order = 2 sqlite> SELECT * FROM [foo]; i = 1 order = 2 sqlite> Note that the square brackets are not displayed because they are not part of the column name. They are delimiters to say, "Hey, I really, really know what I'm doing; I know that my column names may be reserved words and I want to do this anyway." Since the square brackets let you put nearly any character in table and column names, you can do hard to comprehend stuff, like this: sqlite> CREATE TABLE [[x] (i integer); sqlite> select * from sqlite_master where type = 'table'; type = table name = foo tbl_name = foo rootpage = 2 sql = CREATE TABLE [foo] ([i] INTEGER, [order] INTEGER) type = table name = [x tbl_name = [x rootpage = 3 sql = CREATE TABLE [[x] (i integer) sqlite> Note that the new table name is "[x" (a square bracket followed by 'x'). Like I said in my first reply to you, using reserved words for column names is dangerous. You should generally try to avoid it. Derrell