2013-05-29 4 views
0

Я студент, выполняющий проект в SQL Server 2005. Я пытаюсь написать процедуру для генерации и вставки первичного ключа для идентификатора. Я думал о триггере ввода, но я получаю ошибки. Может кто-то мне помочь .. Это то, что я придумал до сих пор:Перед запуском для SQL Server 2005

CREATE TRIGGER Create_ResourceID 
ON Resource 
before INSERT 
AS 
    DECLARE @resourceid INT 
    SELECT @resourceid = (max(ResourceID) + 1) FROM Resource 
GO 

INSERT INTO Resource(ResourceID) VALUES (@resourceid); 
+0

Какую ошибку вы получаете? Кстати, я думаю, вам нужно отступить в первой строке вашего кода (начиная с 'CREATE TRIGGER', но я не могу редактировать в отступе, потому что StackOverflow говорит мне, что мне нужно изменить не менее 6 символов, а отступ - всего 4 ! – nurdglaw

+1

SQL Server не имеет триггеров 'BEFORE'. Просто не существует. Вместо этого вы должны использовать триггер' INSTEAD OF INSERT'. –

+0

Почему бы вам не использовать ['IDENTITY'] (http://msdn.microsoft.com/en-us/library/ms186775(v=sql.90).aspx), который позволяет избежать всех изменений в состоянии гонки, которые, как вам кажется, суждено испытать. Не требуется триггер, и назначенное значение доступно с помощью ['SCOPE_IDENTITY()'] (http://msdn.microsoft.com/en-us/library/ms190315 (v = sql.90) .aspx) или ['OUTPUT'] (http://msdn.microsoft.com/en-us/library/ms177564(v=sql.90).aspx). (_Do_ найдите время, чтобы узнать об OUTPUT.) – HABO

ответ

1

Вам нужно использовать триггер, чтобы сделать это?

Простейшая вещь, чтобы получить SQL Server, чтобы установить первичный идентификатор ключа для вас, что-то вроде этого:

CREATE TABLE Resource (
    ResourceID int identity, 
    . 
    . 
    . 
) 
+0

Итак, если я создаю таблицу и сделаю ResourceID a int Identify, тогда, когда есть оператор insert, если будет автоматически создавать и вводить ResourceID? Причина, по которой я спрашиваю, заключается в том, что я создаю приложение в Visual Studio 2008, чтобы пользователь вводил данные, и данные будут вставлены в таблицу. Уилл и тип идентичности позаботятся об этом? – JerseyGirl1201

+0

Да, но это «ИДЕНТИЧНОСТЬ». См. [Http://msdn.microsoft.com/en-GB/library/ms186775%28v=sql.90%29.aspx]. Если вы просто хотите, чтобы число однозначно идентифицировало каждую строку в таблице, 'IDENTITY' сделает это за вас. – nurdglaw

+0

Спасибо за информацию, которая отлично работала. – JerseyGirl1201