sql存储过程:通用写入更新数据
经过再次僚属纠正了些错误.也采用了事务来操作

有哪些地方没有处理好的
请大侠纠正

  1. */ ------------------------------------------------------------
  2. */ 出自: 歌特中国 http://www.cngothic.com
  3. */ 作者: cngothic
  4. */ ------------------------------------------------------------
  5. CREATE PROC AddUpTable
  6.   @tableName      NVARCHAR(50),
  7.   @fileName       NVARCHAR(1000),
  8.   @fileCount      VARCHAR(8000),
  9.   @addUpYN        BIT,
  10.   @whereStr       NVARCHAR(1000) = NULL,
  11.   @groupStr       NVARCHAR(1000) = NULL,
  12.   @inUpdateNum    SmallInt   OUTPUT
  13. AS
  14.   declare   @sqlStr   VARCHAR(8000)
  15.   declare   @startFileName    INT
  16.   declare   @endFileName      INT
  17.   declare   @startFileCount   INT
  18.   declare   @endFileCount     INT
  19.   IF @addUpYN = 1
  20.     BEGIN
  21.       SET @sqlStr = 'INSERT INTO ' + @tableName + ' (' + @fileName + ') VALUES (' + @fileCount + ')'
  22.     END
  23.   ELSE
  24.     BEGIN
  25.       SET @fileName = @fileName + ','
  26.       SET @fileCount = @fileCount + '|||'
  27.       SET @sqlStr = 'UPDATE ' + @tableName
  28.       SET @startFileName = 1
  29.       SET @startFileCount = 1
  30.       SET @endFileName = CHARINDEX(',', @fileName, @startFileName)
  31.       SET @endFileCount = CHARINDEX('|||', @fileCount, @startFileCount)
  32.       SET @sqlStr = @sqlStr + ' SET '
  33.       WHILE (@endFileName <> 0)
  34.         BEGIN
  35.           SET @sqlStr = @sqlStr + SUBSTRING(@fileName, @startFileName, @endFileName-@startFileName) + '='
  36.           SET @startFileName = @endFileName + 1
  37.           SET @endFileName = CHARINDEX(',', @fileName, @startFileName)
  38.  
  39.           SET @sqlStr = @sqlStr + '''' + SUBSTRING(@fileCount, @startFileCount, @endFileCount-@startFileCount) + ''','
  40.           SET @startFileCount = @endFileCount + 3
  41.           SET @endFileCount = CHARINDEX('|||', @fileCount, @startFileCount)
  42.         END
  43.         SET @sqlStr = SUBSTRING(@sqlStr, 1, LEN(@sqlStr)-1)
  44.         IF (@whereStr != '')
  45.           BEGIN
  46.             SET @sqlStr = @sqlStr + ' WHERE ' + @whereStr
  47.           END
  48.          IF (@groupStr != '')
  49.           BEGIN
  50.             SET @sqlStr = @sqlStr + ' GROUP BY ' + @groupStr
  51.           END
  52.    END
  53.   PRINT @sqlStr
  54.   BEGIN TRANSACTION
  55.     EXEC(@sqlStr)
  56.     IF @@error=0
  57.       BEGIN
  58.         COMMIT TRANSACTION
  59.         SET @inUpdateNum = 1
  60.       END
  61.     ELSE
  62.       BEGIN
  63.         ROLLBACK TRANSACTION
  64.         SET @inUpdateNum = 0
  65.       END
  66.  
  67.  
  68. GO

, , , ,