Идентификационный ключ в столбце varchar - T-SQL - PullRequest
3 голосов
/ 03 сентября 2010

Я хочу знать, могу ли я создать Identity (автоинкремент для столбца Varchar. И как я могу сделать его первичным ключом и создать ссылки на внешний ключ в другой таблице.

Это код, который яесть -

CREATE TABLE Questions(
    QuestionID int IDENTITY PRIMARY KEY, 
    QuestionNo as 'Q'+Cast(QuestionID as Varchar(10),       
    Question Varchar(200)
)

Есть ли способ, которым я могу сделать QuestionNo в качестве первичного ключа и ссылаться на него в другой таблице (например, «Ответы (AnswerID, QuestionNo, AnswerText)?

Ответы [ 3 ]

9 голосов
/ 03 сентября 2010

Это работало для меня на SQL Server 2005:

CREATE TABLE Questions(
  QuestionID int IDENTITY NOT NULL, 
  QuestionNo as 'Q'+Cast(QuestionID as Varchar(10)) PERSISTED PRIMARY KEY, 
  Question Varchar(200)
)

Основная часть состоит в том, что вычисляемому столбцу требуется ключевое слово PERSISTED ...

3 голосов
/ 03 сентября 2010

Не напрямую.

  • использовать вычисляемый столбец в целочисленном столбце (согласно ответу OMG Ponies)
  • используйте udf ( SO1 , SO2 )

Мой вопрос: почему? это будет медленнее простого числа.

0 голосов
/ 17 октября 2015

этот код работает

CREATE TABLE IdentityExample(
  ID int IDENTITY NOT NULL, 
  QNo as 'Q'+Cast(ID as Varchar(10)) PERSISTED PRIMARY KEY, 
  name Varchar(200)
)
...