2012-05-17 4 views
0

Я использую asp.net2008 и MY SQL.Как автогенерировать имя пользователя определенной строкой?

Я хочу автогенерацию значение для пользователя поля с форматом как

"SISI001", "SISI002", 

и т.д. в SQL всякий раз, когда новая запись будет вставлена.

Как я могу это сделать?

Что может быть SQL-запрос?

Спасибо.

+0

вы можете сделать функцию и установить значение, чтобы получить обновление, как то, что вы хотите ... – Addicted

+0

@Rohan :: Есть ли возможности удалить любую запись из таблицы? –

+0

@Rohan :: теперь скажите, сколько персонажей вы хотите получить после «SISI»? –

ответ

2

Добавьте столбец с автоматическим приращением целочисленного типа данных
Затем получить максимальное значение этого столбца в таблице с помощью «Max()» и присвойте значение целочисленной переменной (пусть переменная будет «x»).
После этого

string userid = "SISI"; 
x=x+1; 
string count = new string('0',6-x.ToString().length); 
userid=userid+count+x.ToString(); 

Используйте userid как ваш username
Надеюсь, что это помогает. Удачи.

+0

спасибо большое. Я сделал это. :) – Rohan

+0

вот проблема с этим кодом. На 1000000-й вставке (когда max() возвращает число, большее 999998) строка 'string count = new string ('0', 6-x.ToString(). Length);' будет удалена ошибка. как выражение «6-x.ToString(). length' отрицательно. ** Описание ошибки **: 'count' должен быть неотрицательным. Имя параметра: count. ** Здесь count означает **: '6-x.ToString(). Length' –

+0

Ya. Но я не конкатенирую счет. Я просто конкатенация userid и x. – Rohan

1

PLAN A> Необходимо сохранить таблицу (ключи), которая содержит последний цифровой идентификатор, сгенерированный для различных объектов. В этом случае объект является «пользователем». Таким образом, таблица будет содержать два столбца, а именно: entity varchar (100) и lastid int.

После этого вы можете записать функцию, которая получит имя объекта и возвращает инкрементированный идентификатор. Используйте этот идентификатор, связанный со строковым компонентом «SISI», который должен быть передан MySQL для вставки в базу данных.

Ниже приводится таблица MySQL tblkeys:

CREATE TABLE `tblkeys` (
    `entity` varchar(100) NOT NULL, 
    `lastid` int(11) NOT NULL, 
    PRIMARY KEY (`entity`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

для MySQL Функция:

DELIMITER $$ 

CREATE FUNCTION `getkey`(ps_entity VARCHAR(100)) RETURNS INT(11) 
BEGIN 
    DECLARE ll_lastid INT; 
    UPDATE tblkeys SET lastid = lastid+1 WHERE tblkeys.entity = ps_entity; 
    SELECT tblkeys.lastid INTO ll_lastid FROM tblkeys WHERE tblkeys.entity = ps_entity; 
    RETURN ll_lastid; 
    END$$ 

DELIMITER ; 

Вызов функции образца:

SELECT getkey('user') 

Пример команды Вставка:

insert into users(username, password) values ('SISI'+getkey('user'), '$password') 

Plan B> Таким образом, идентификатор будет немного больше, но не потребует дополнительной таблицы. Используйте следующий SQL, чтобы получить новый уникальный ID:

SELECT ROUND(NOW() + 0) 

Вы можете передать его как часть команды вставки и сцепить его со строкой компонента «SISI».

+0

Я отредактировал свой ответ, предоставив код для вызова таблицы, функции и образца функции. НТН. – somnath

+0

Вы можете написать простой класс/функцию ASP.NET, чтобы сделать то же самое. Просто Google это! – somnath

0

Я не asp.net разработчик, но я могу помочь вам
Вы можете сделать что-то вроде этого ...

создать последовательность в вашей базе данных MySQL как-

CREATE SEQUENCE "Database_name"."SEQUENCE1" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 001 START WITH 21 CACHE 20 NOORDER NOCYCLE ; 

, а затем при вставке используйте этот запрос -----

insert into testing (userName) values(concat('SISI', sequence1.nextval)) 

может помочь вам в ваших сомнениях ...

+0

AFAIK MySQL не имеет ничего называемого последовательности. У Oracle есть. – somnath

+0

Я не знаю, что ... я просто попытался дать ОП некоторый намек на решение вопроса ... – Addicted

0

Попробуйте это:

CREATE TABLE Users (
IDs int NOT NULL IDENTITY (1, 1), 
USERNAME AS 'SISI' + RIGHT('000000000' + CAST(IDs as varchar(10)), 4), --//getting uniqueness of IDs field 
Address varchar(150) 
) 

(не проверено)

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