Запрос относительно SQL Вставка в SQL Server? - PullRequest
0 голосов
/ 15 декабря 2009

Я использую SQL Server 2008 и разрабатываю проект, который находится на стадии сопровождения.

Я хочу вставить запись в таблицу, первичным ключом которой является целое число, но не идентификатор. например имя таблицы tblFiles и поля ID, FileName, FileContent.

На самом деле эта таблица используется, поэтому я не хочу вносить в нее какие-либо изменения схемы. И я хочу ключ после вставки строки, потому что я должен поместить его в другую таблицу. Существующие значения в столбце Id отличаются целым числом, то есть не в последовательности.

Итак, я хочу запрос, который также возвращает мне значение Id. Поэтому я хочу вставить только FileName и FileContent и какой-то sql, которому я могу вставить свой запрос на вставку, который вставляет уникальный идентификатор, а также отправляет мне этот идентификатор

Ответы [ 5 ]

4 голосов
/ 15 декабря 2009

Что ж, если это не поле IDENTITY - разве вам не нужно указывать «ID» во вставке, чтобы оно было успешным? Если это так - у вас уже есть идентификатор ! Или чего мне не хватает? Идентификатор определяется триггером или чем-то подобным?

Если это так, попробуйте этот запрос:

INSERT INTO dbo.tblFiles(FileName, FileContent)
OUTPUT inserted.ID
VALUES ('yourfile.name', 'your contents')

Это должно вернуть вновь вставленный идентификатор из запроса INSERT.

Марк

1 голос
/ 16 декабря 2009

так что мой последний запрос выглядит как ...

Insert into dbo.tblData (Id, FName, LName) 
output inserted.Id
values ((SELECT MAX(ID) + 1 FROM dbo.tblData), 'xyz', 'abc')
1 голос
/ 15 декабря 2009

Измените спецификацию идентификатора столбцов> Является ли идентификатор на Да.

После вставки в таблицу вы можете

Select SCOPE_IDENTITY() 

, чтобы получить только что добавленное целое число и вернуть его в свой SP.

Если вы действительно не можете редактировать схему базы данных, возможно, вы можете добавить другую таблицу в базу данных, которая имеет два столбца с именами ID и CurrentDate. Сделайте столбец идентификатора идентификатором. В коде вставьте в эту таблицу сначала выберите SCOPE_IDENTITY (), а затем используйте целое число, возвращаемое для вставки в качестве идентификатора в таблицу tblFles.

P.S. Прекратите ставить перед таблицей префикс «tbl», это так 1999. :)

1 голос
/ 15 декабря 2009

Вы можете создать уникальное целое число, не так элегантно, используя

ВЫБРАТЬ МАКС. (ID) + 1 ОТ tblFiles

И просто верните это из вашего запроса или sproc в зависимости от обстоятельств. В противном случае следуйте указаниям marc_s, если оно уже известно.

ОБНОВЛЕНИЕ: должен сказать, что вместо этой помадки, я бы настоятельно рекомендовал настойчиво отодвинуться назад и изменить таблицу, так что это столбец идентификаторов, поскольку именно так и есть. все ответы пока просто выдумки, особенно мои.

0 голосов
/ 16 октября 2012

Мы можем присвоить max (ID) +1 в целочисленной переменной, затем мы можем вставить

Declare @ID int
Select @ID = ISNULL(MAX(ID),0) + 1 FROM tblFiles

INSERT INTO tblFiles 
(
  ID, FileName, FileContent
)
Select @ID,'FileName','FileContent'

Эта вставка прямая,

INSERT INTO tblFiles 
(
  ID, FileName, FileContent
)
 Select (Select ISNULL(MAX(ID),0) + 1 FROM tblFiles),'FileName','FileContent'

Здесь мы должны использовать условие ISNULL, потому что в таблице нет данных, тогда он вернет Null. Таким образом, ISNULL (MAX (ID), 0) + 1 это условие даст данные будут нулевыми, тогда 0 + 1 = 1.

Спасибо

...