我有SQL Server表tbl_Slide_master
。它有一列slide_position
作爲int
。但是,當管理員想要添加新幻燈片時,此列將從該列的現有最大值增加1。我也想更新這個領域。如何在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;
有沒有像
消息1046,級別15,狀態1,過程sp_InsertNewSlide發生一個錯誤,21號線
子查詢在此方面不容許。只允許使用標量表達式 。
問題很不清楚 - 你問的是如何在表上創建一個自動增量字段,得到些什麼? – Oded 2013-04-06 08:47:46
對於自動增量列,使用'INT IDENTITY(1,1)'數據類型 - 不要滾動自己的邏輯...(並且使用'SELECT MAX()+ 1'非常糟糕,**不安全**在負載下 - 你保證得到重複!) – 2013-04-06 08:49:28
備註:你應該**不要**爲存儲過程使用'sp_'前綴。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](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_'並將其他內容用作前綴 - 或者根本沒有前綴!運行存儲過程的 – 2013-04-06 08:49:46