0

我有問題compilin這code..can誰能告訴什麼是錯的語法語法錯誤:存儲過程一般插入

CREATE PROCEDURE spGenericInsert 
    (
     @insValueStr nvarchar(200) 
     @tblName nvarchar(10) 
    ) 

AS 

BEGIN 

    DECLARE @insQueryStr nvarchar(400) 
    DECLARE @insPrimaryKey nvarchar(10) 
    DECLARE @rowCountVal integer 
    DECLARE @prefix nvarchar(5) 


    IF @tblName='HW_Master_DB' 
     SET @rowCountVal=(SELECT COUNT(*) FROM HW_Master_DB) 
    ELSE IF @TableName='SW_Master_DB' 
     SET @rowCountVal=(SELECT COUNT(*) FROM SW_Master_DB) 
    ELSE IF @TableName='INV_Allocation_DB' 
     SET @rowCountVal=(SELECT COUNT(*) FROM INV_Allocation_DB) 
    ELSE IF @TableName='REQ_Master_DB' 
     SET @rowCountVal=(SELECT COUNT(*) FROM REQ_Master_DB) 

    IF @tblName = 'DEFECT_LOG' 
     SET @prefix='DEF_' 
    ELSE IF @tblName='INV_Allocation_DB' 
     SET @prefix='INV_' 
    ELSE IF @tblName='REQ_Master_DB' 
     SET @prefix='REQ_' 
    ELSE IF @tblName='SW_Master_DB' 
     SET @prefix='SWI_' 
    ELSE IF @tblName='HW_Master_DB' 
     SET @prefix='HWI_' 


    SET @insPrimaryKey= @prefix + RIGHT(replicate('0',5)+ convert(varchar(5),@rowCountVal),5) -- returns somethin like 'DEF_00005' 

    SET @insQueryStr= 'INSERT INTO ' + @tblName + ' VALUES (' + @insPrimaryKey + ',' + @insValueStr + ')' 

    EXEC(@insQueryStr) 

END 

我知道整數標識列..但我必須使用在高度多用戶的Intranet系統中插入新值的表中的AlphaNumeric ID。

記錄不會從表格中刪除。所以問題在於保持同步插入帶ID字段的記錄自動生成。

任何建議如何做到這一點。

+0

什麼問題?你遇到了什麼錯誤?哪裏? – 2009-01-19 10:35:01

+0

您是否真的*讀過*您嘗試運行時收到的錯誤消息?對我來說,似乎是將兩個程序複製粘貼在一起,而無需任何有關SQL的線索。需要少量自己的努力,否則人們會因爲你的問題而感到不高興。 – Tomalak 2009-01-19 10:40:23

回答

2

我不能立即看到什麼是錯的語法(the sharp eye of Jonathan Lonowski has solved that already),但也有一些事情錯代碼:

  1. 您創建動態的SQL,所以你的代碼是vunerable到SQL注入攻擊。兩個輸入參數都以危險的方式使用。通過爲每個表創建一個存儲過程來解決這個問題。所以你不必再生成SQL了。

  2. 沒有檢查表是否不在所使用的列表中。

  3. 您的主鍵生成算法可以/將在多用戶場景中創建重複鍵,或者如果從表中刪除行。通過使用您正在使用的數據庫中的identity列或some other feature來解決。

3

任你選:不定義

  • @TableName
  • @tblName@TableName
0
從丟失大量的分號

除此之外,你將不得不給我們更多的要繼續。

事實上,SQL Server可能不需要分號,所以忽視...

here是開始學習有關SQL Server存儲prcedures的好地方。您也可以更多地使用search Google

+0

hi 我必須在哪裏放分號。我剛剛開始使用SQL Server。我還沒有遇到好的材料來學習有效的存儲過程技術和語法。 – 2009-01-19 10:41:07

1

老實說,你似乎在爲自己頭痛。檢查整數身份和IDENTITY syntax

除非你是真正需要使用鍵在「DEF_00005」格式,它們會讓你的生活變得更加簡單。

CREATE TABLE DemoTable (
    Key INT IDENTITY(1,1) NOT NULL PRIMARY KEY, 
    Value VARCHAR(200) 
); 

INSERT INTO DemoTable (Value) VALUES ('Something'); 

SELECT * FROM DemoTable; 

    | Key | Value  | 
    |-----|-----------| 
    | 1 | Something |