Auto-incremented ID in SQL Server [duplicate] - sql

This question already has answers here:
Closed 11 years ago.
Possible Duplicate:
Auto-increment primary key in SQL tables
I am working at the moment with SQL Express 2008 and C#.
In my application, I save some data in the table "buchung" in my database. Well, in this table I need a sequence that starts with 1 and if I save new data, the id should increase.
To my surprise I canĀ“t find anything about this on google.
How can I do this? Can you help me?

You need to create an IDENTITY() column on your table.
For example:
CREATE TABLE buchung
(
Id int IDENTITY(1,1),
FirstName varchar(20),
LastName varchar(30)
);
The format is IDENTITY [ (seed , increment ) ], where seed is the first value, and increment is the number that is added for each new row.

have you looked into auto-increment with seed as 1 and increment by 1 ...
hope this helps .

You need to define a identity column.
CREATE TABLE myTable (
myColumn INT IDENTITY(1,1),
....
)

Setting an integer type column to be an "Identity" will do this in SQL Server.
However this has a drawback. If you have a failed transaction then the number that you have created will be lost forever. If this could cause you problems in integration you need to take this into consideration.

You should add a numeric column into your table with identity featured.
Click for details.

Alter table dbo.myTable add SeqId int identity(1,1) primary key clustered;
call it ID or SeqId or as you wish. if you alteady have a PK on that table you could make the existing one a unique index and nonclustered. depends on your whole table design.

Related

Automatic uniqueidentifier during table design

I've created a new table and made column id the primary key and defined it as uniqueidentifier.
Is there a way during the tables design in SQL Server Management Studio to assign a rule that all new rows auto generate a new uniqueidentifier in the id column?
At the moment to make my form (made on Retool) write to the table I need to type out a random set of characters, essentially self creating my own uniqueidentifier which obviously isn't correct.
Avoid the designers, they've been a complete and utter mess for 17 years. Do this in a query window:
USE tempdb;
GO
CREATE TABLE dbo.what
(
id uniqueidentifier NOT NULL
CONSTRAINT DF_what_id DEFAULT(NEWSEQUENTIALID()),
-- or NEWID() if you like page splits
name nvarchar(128),
CONSTRAINT PK_what PRIMARY KEY (id)
);
INSERT dbo.what(name) VALUES(N'hi'),(N'there');
SELECT id, name FROM dbo.what;
Output (yours will have different values for id):
id
name
84c37c76-8c0e-ed11-ba5d-00163ef319ff
hi
85c37c76-8c0e-ed11-ba5d-00163ef319ff
there

Does anyone know how to make it so every entry has an ID one more greater than the last in SQL?

How do I make it so the IDs go up by 1 every time it's been added?
The fix for this is using auto increment. The query will be a bit different depending on which database system you are using. If you are using something like MariaDB or MySQL these query's will work.
If you are creating a table this query can be used.
CREATE TABLE tableName(
columnName int NOT NULL AUTO_INCREMENT,
anOtherColumnName varchar(255),
PRIMARY KEY (columnName)
);
Or you can alter the table by using this SQL query.
alter table yourTableName modify yourColumnName int AUTO_INCREMENT;
If you want to learn more about auto increment visit:
https://www.w3schools.com/SQl/sql_autoincrement.asp

SQL Identify Auto Increment from a certain number

I am trying to auto increment my primary key, by 0.1 each time. Starting from 0.1. Is this possible?
CREATE TABLE NewTable
(
ID BigInt IDENTITY NOT NULL,
CONSTRAINT PK_ID PRIMARY KEY (ID),
)
No. BigInt is a 8 byte integer value.
Note: Assuming as Microsoft SQL Server.
No, even if you changed the data type of the field, the identity increment 'must be a non-zero integral number containing 18 digits or less'
(Presuming this is sql server)
In SQL Server, the Identity column cannot contain decimal values in its seed or increment.
Why would you need to do this -- for presentation purposes? If so, don't. If needed, one option is to create a trigger. You could also consider using a Computed column instead -- make it 1/10 the value of the Id (your Identity field seeded and incremented at 1 -- Identity(1,1)).
Again, not sure why you'd need to do this though.
Some solution would be a view:
CREATE VIEW v_NewTable AS
SELECT ID/10
FROM NewTable

Altering my primary key to auto increment - JavaDB

I am using Netbeans, writing in Java and using Derby.
I have a table within APP called PERSON. Within PERSON I have a column called PID with the following properties:
Name: PID
Nulls allowed: [ ]
Data type: NUMERIC
Column size: 4
Decimal digits: 0
Position: 1
Part of a primary key: [/]
Part of an index: [/]
I used the meta data isAutoIncrement function to check if it was already auto incrementing and it is not!
I have since tried using the following SQL commands to alter it:
I believe this may not have been for Derby:
ALTER TABLE APP.PERSON ALTER PID NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY
(START WITH 1, INCREMENT BY 1);
Upon checking the Oracle website, I found the correct syntax:
ALTER TABLE APP.PERSON ALTER PID SET INCREMENT BY 1;
I even tried leading zeros:
ALTER TABLE APP.PERSON ALTER PID SET INCREMENT BY 0001;
None of which have worked, the error I get on the last two are:
ALTER TABLE '"APP"."PERSON"' specified attributes for column 'PID' that are
not compatible with the existing column.
Any ideas of the correct syntax?
Here's what I generally do to accomplish this:
Create a new table, with the desired schema, including the generated primary key
Issue a INSERT INTO newtable SELECT columns FROM oldtable to populate the new table's data from the old table
Rename the old table to some temporary name, like table_soon_to_be_deleted
Rename the new table to the desired table name
Do some testing to make sure that my behavior is as expected
Drop the old table that I renamed in step (4).
JavaDB does not allow altering a column with generated key word so I found the best way is to recreate the table and specify the primary key as auto incremented. For example;
create table staff(
ID int primary key always generated as identity,
name varchar(100)
);
This worked for me.

Auto Increment Always adds 1 to previous Row, Even when previous row has been dropped [duplicate]

This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
Reset AutoIncrement in SqlServer after Delete
I'm having an annoying issue with an Identity auto-increment column value within an Sql Server 2008 database. When I delete a row from my table (or delete all rows), when I add a new entry it's incremented from whichever value was inserted into a previous record, regardless as to whether that record still exists.
I was wondering if anyone knows how to get it so that the IDENTITY column will auto-increment from whatever the previous record that EXISTS is.
My code looks like this:
CREATE TABLE Product
(
Product_Barcode INT NOT NULL PRIMARY KEY IDENTITY,
Product_Description VARCHAR(255),
Product_Name VARCHAR(255),
Product_Supplier VARCHAR(255) FOREIGN KEY REFERENCES Supplier(Supplier_Name),
Product_Size VARCHAR(255),
Product_Weight FLOAT
);
Typically you wouldn't want this because new and past records can share IDs. If you have referential constraints, this might cause confusion.
The only way I know how to do it though, is by inserting using a subquery eg.
INSERT INTO Product (Product_Barcode, Product_Description) VALUES (SELECT MAX(Product_Barcode) + 1 FROM Product, "Any description here");