这阵子一直没有发布新的日志.工作中一直开发一个项目.我把项目迁移回家时出现了一个问题.

页面与sql进行多次通信是就会很慢.很简单的一个页面搞了30多秒还没有显示出来.当时以,IIS, 伪静态, 程序, windows系统 进行排查.找原因.为什么没有考虑到sql2005尼.我在SQL里查询测试了很快,也不没有去考虑它.找了一圈的原因后来还是不行.系统也还原了.无耐我从新安装WINDOWS 2008.下面安装SQL2005.这时查询机器配置时提示一个警告.这项就是IIS.我想不为吧.以前安装好像不会提示这个警告的.这次小心的没有接着安装.把SQL 2008解压出来后安装.

下面结果很显然.的确是SQL 2005的问题.SQL 2008下面页面跑的唰唰的.

sql存储过程:通用删除数据
经过修改利用上了事务.对于ASP开发时获取输出参数的值来判断是否执行成功

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

  1. */ ------------------------------------------------------------
  2. */ 出自: 歌特中国 http://www.cngothic.com
  3. */ 作者: cngothic
  4. */ ------------------------------------------------------------
  5. CREATE PROC DeleteTable
  6.   @tableName     NVARCHAR(30),
  7.   @whereStr      NVARCHAR(500)  = NULL,
  8.   @groupStr      NVARCHAR(50) = NULL,
  9.   @deleteNum     smallInt   OUTPUT
  10. AS
  11.   DECLARE @sqlStr  NVARCHAR(1000)
  12.   SET @sqlStr = 'DELETE FROM ' + @tableName
  13.   if (@whereStr != '')
  14.     BEGIN
  15.       SET @sqlStr = @sqlStr + ' WHERE ' + @whereStr
  16.     END
  17.   if (@groupStr != '')
  18.     BEGIN
  19.       SET @sqlStr = @sqlStr + ' GROUP BY ' + @whereStr
  20.     END
  21.  
  22.   BEGIN TRANSACTION
  23.     EXEC(@sqlStr)
  24.     IF @@error=0
  25.       BEGIN
  26.         COMMIT TRANSACTION
  27.         SET @deleteNum = 1
  28.       END
  29.     ELSE
  30.       BEGIN
  31.         ROLLBACK TRANSACTION
  32.         SET @deleteNum = 0
  33.       END
  34.  
  35. GO

, , , , ,

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

, , , ,

sql语句:CASE WHEN精妙语句
说种情况如商品价格,把不同区域的价格的小数改变成.49, .75, .99以便促销活动。
下面SQL语句代码描述。价格提10%后把小数位改成49, .75, .99

  1. SELECT @Markup = .10
  2. SELECT @Multiplier = @Markup +1
  3. SELECT TOP 10 ProductID, ProductName, UnitPrice, UnitPrice * @Multiplier AS "Marked Up Price", "New Price" =
  4. CASE
  5.    WHEN FLOOR(UnitPrice * @Multiplier + .24) > FLOOR(UnitPrice * @Multiplier) THEN FLOOR(UnitPrice * @Multiplier) + .95
  6.    WHEN FLOOR(UnitPrice * @Multiplier + .5) > FLOOR(UnitPrice * @Multiplier) THEN FLOOR(UnitPrice * @Multiplier) + .75
  7.    ELSE FLOOR(UnitPrice * @Multiplier) + .49
  8. END
  9. FROM Products
  10. ORDER BY ProductID DESC

此代码语句中用到了CASE WHEN条件语句与FLOOR函数,先解释下
FLOOR把数值取整:

  1. PRINT FLOOR(12.1)
  2. --返回12
  3. PRINT FLOOR(12.9)
  4. --返回12

CASE WHEN条件语句稍有些编程基础的人应该都有看懂重点不解释这个语句怎么用的。说下上面代码。个人认为还是比较精妙的

  1. SELECT @Markup = .10
  2. SELECT @Multiplier = @Markup +1
  3. UnitPrice * @Multiplier

把价格提升10%。

  1. FLOOR(UnitPrice * @Multiplier + .24) > FLOOR(UnitPrice * @Multiplier)  THEN FLOOR(UnitPrice * @Multiplier) + .95
  2. --FLOOR(18.00 * 1.1 + .24) > FLOOR(1.8 * 1.1)
  3. --FLOOR(19.8 + .24) > FLOOR(19.8)
  4. --21 > 19.8
  5. --成立后返回FLOOR(19.8) + .95,这也是为什么+.24而不是其它数值。综合上面CASE WHEN语句就能更好的理解

, ,