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

本文介绍了一个SQL存储过程示例,该示例展示了如何通过不同的条件进行数据插入或更新操作。文章详细解释了如何根据布尔标志决定使用INSERT或UPDATE语句,并介绍了如何构造动态SQL语句来实现这一目标。

 

  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

 

转载于:https://www.cnblogs.com/hellen-li/archive/2010/08/16/1800555.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值