У меня есть таблица SQL Server tbl_Slide_master
. Он имеет одну колонку slide_position
как int
. Однако, когда администратор хочет добавить новый слайд, этот столбец увеличивается с 1 от существующего максимального значения этого столбца. и я просто хочу обновить это поле.Как установить столбец incrementer в SQL Server 2005
Для получения дополнительной информации я включил этот код.
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_InsertNewSlide]
(
@Header_text varchar(25),
@ImageName varchar(50),
@Img_height int,
@Img_width int,
@Para_text varchar(520),
@NewId INT OUTPUT
)
AS
BEGIN TRAN;
BEGIN TRY
INSERT INTO [OmStocks].[dbo].[tbl_Slide_master]
([Header_text]
,[ImageName]
,[Img_height]
,[Img_width]
,[Para_text]
,[slide_position]
)
VALUES
(@Header_text,@ImageName,@Img_height,@Img_width,@Para_text,SELECT MAX(slide_position)+1)
SET @NewId= SCOPE_IDENTITY()
COMMIT TRAN;
END TRY
BEGIN CATCH
ROLLBACK TRAN;
DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int;
SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY();
RAISERROR(@ErrMsg, @ErrSeverity, 1);
END CATCH;
Существует произошла одна ошибка, как
Msg 1046, Level 15, State 1, процедура sp_InsertNewSlide, линия 21
подзапросы не допускаются в этом контексте. Разрешены только скалярные выражения .
Вопрос очень неясен - вы спрашиваете, как иметь поле автоматического приращения на столе или о вашей ошибке получать? – Oded
Для столбца автоинкрементции используйте тип 'INT IDENTITY (1,1)' datatype - не сворачивайте свою собственную логику ... (и использование 'SELECT MAX() + 1' очень плохое и ** небезопасно ** под нагрузкой - вы получите дубликаты!) –
Боковое примечание: вы не должны ** использовать префикс 'sp_' для ваших хранимых процедур. Microsoft [зарезервировала этот префикс для собственного использования (см. * Именование сохраненных процедур *)] (http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx) и вы рискуете столкнуться с именем когда-нибудь в будущем. [Это также плохо для производительности вашей хранимой процедуры] (http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix). Лучше просто просто избегать 'sp_' и использовать что-то еще в качестве префикса - или никакого префикса вообще! –