Необходимо объявить скалярную переменную "@MyNewID" - PullRequest
1 голос
/ 12 апреля 2019

Я пытаюсь назначить каждой строке таблицы «Студенты» уникальный идентификатор, используя пул номеров (отсюда и таблица UNIQUE_NUMBERS).

Я не уверен, что моя реализация верна, но я получаю сообщение об ошибке. Может кто-нибудь, пожалуйста, помогите с сегментом кода.

Я создаю веб-приложение, которое добавляет / редактирует / удаляет студентов в таблице базы данных. Я пытаюсь убедиться, что у каждого пользователя есть уникальный идентификатор, который не превышает 8 числовых значений

CREATE TABLE DBO.UNIQUE_NUMBERS
(
  UNIQUE_NUMBER INT
)

INSERT INTO DBO.UNIQUE_NUMBERS (UNIQUE_NUMBER)
  VALUES ('1000')

DECLARE @MyNewID VARCHAR(8);
DECLARE @NextNo INT; 

UPDATE DBO.UNIQUE_NUMBERS
  SET UNIQUE_NUMBER = UNIQUE_NUMBER +1, @NextNo = UNIQUE_NUMBER;

SET @MyNewID = REPLACE(STR(@NextNo,8),'','0');

INSERT INTO DBO.STUDENTS (STUDENT_ID, STUDENT_FIRSTNAME, STUDENT_SURNAME)
  VALUES    ('SID'+ (SELECT * FROM DBO.UNIQUE_NUMBERS)  , 'Daenerys' , 'Targaryen' ),
        ('SID'+ @MyNewID , 'Jon' , 'Snow' ),
        ('SID'+ @MyNewID , 'Gregor' , 'Clegane' ),
        ('SID'+ @MyNewID , 'Arya' , 'Stark' ),
        ('SID'+ @MyNewID , 'Cersei' , 'Lannister' ),
        ('SID'+ @MyNewID , 'Joffrey' , 'Baratheon' ),
        ('SID'+ @MyNewID , 'Petyr' , 'Baelish' ),
        ('SID'+ @MyNewID , 'Khal' , 'Drogo' ),
        ('SID'+ @MyNewID , 'Theon' , 'Greyjoy' ),
        ('SID'+ @MyNewID , 'Ramsey' , 'Bolton' )

Когда я просматриваю Данные через представление веб-приложения, STUDENT_ID должен отображаться, как показано ниже:

STD12345678

А затем приращение для следующего ученика:

STD12345679

1 Ответ

2 голосов
/ 12 апреля 2019

как насчет этого -

create table #temp
    ( STUDENT_KEY INT identity (10000000,1),
    STUDENT_ID  AS CONCAT('STD',STUDENT_KEY),
    STUDENT_FIRSTNAME VARCHAR(255), 
    STUDENT_SURNAME VARCHAR(255)
    )

INSERT INTO #temp
VALUES  ( 'Daenerys' , 'Targaryen' ),
        ( 'Jon' , 'Snow' ),
        ( 'Gregor' , 'Clegane' ),
        ( 'Arya' , 'Stark' ),
        ( 'Cersei' , 'Lannister' ),
        ( 'Joffrey' , 'Baratheon' ),
        ( 'Petyr' , 'Baelish' ),
        ( 'Khal' , 'Drogo' ),
        ( 'Theon' , 'Greyjoy' ),
        ( 'Ramsey' , 'Bolton' )


SELECT * FROM #temp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...