2013-04-06 66 views
-2

我有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號線
子查詢在此方面不容許。只允許使用標量表達式 。

+0

問題很不清楚 - 你問的是如何在表上創建一個自動增量字段,得到些什麼? – Oded 2013-04-06 08:47:46

+4

對於自動增量列,使用'INT IDENTITY(1,1)'數據類型 - 不要滾動自己的邏輯...(並且使用'SELECT MAX()+ 1'非常糟糕,**不安全**在負載下 - 你保證得到重複!) – 2013-04-06 08:49:28

+2

備註:你應該**不要**爲存儲過程使用'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

回答

2

在你VALUES條款您有:

SELECT MAX(slide_position)+1 

這不是一個有效的子查詢,因爲它不包括在查詢表名。

此遞增的字段的邏輯我也不清楚,所以我會假設你只是想在表中目前最大的價值:

SELECT MAX(slide_position)+1 FROM tbl_Slide_master 

但是,如果這僅僅是一個正常的標識字段,你應該在表創建腳本中聲明它爲IDENTITY (1,1)字段,並讓SQL Server管理它。

+0

我可以從更新查詢更新此IDENTITY字段。 – 2013-04-06 09:15:37

+0

那不是我找到它的解決方案我沒有使用這個like searial我不想使用更新查詢來更新這個slide_position。 – 2013-04-06 09:42:27

+1

@ShalinGajjar - 不,這是由SQL Server管理的。你正在做的是在負載下容易出現問題。 – Oded 2013-04-06 10:20:24