SQL--生成Insert,Update存储过程的过程

 

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

 

posted @ 2010-08-16 11:35  Hellen.Li  阅读(413)  评论(0编辑  收藏  举报