WEB开发网
开发学院数据库MSSQL Server 关于 T-SQL 的几点小九九 阅读

关于 T-SQL 的几点小九九

 2009-06-08 10:31:48 来源:WEB开发网   
核心提示:忽然想起前不久一个朋友对我所说的话:一个转身或许就意味着一辈子……,时间流逝的总是无情无意,关于 T-SQL 的几点小九九,让你没有机会去申诉,转眼距离我上次落笔,寻觅到 SET ROWCOUNT 来实现您的要求,e.g:USEOrderFormIFEXISTS(SELECT[name]FR

忽然想起前不久一个朋友对我所说的话:一个转身或许就意味着一辈子……。时间流逝的总是无情无意,让你没有机会去申诉,转眼距离我上次落笔,已经近3月了,发生了些什么,忙碌着什么,仿佛都不在重要了。

不在那么煽情了,说说今天想要描述的主题吧,一些关于 SQL SERVER 和 T-SQL 的话题吧。

先说些基础的话题吧,或许因为过于基础,我们从来没有想过要去深究,从而也就有着许多容易被我们忽视的一些问题:

1.  T-SQL 和 ANSI SQL 的一次强烈对比

如果您工作中的数据库环境是SQL SERVER2000,而又困扰于 SELECT TOP 无法满足您的查询记录条数的变量化的需求,您一定会在多方寻找帮助之后,寻觅到 SET ROWCOUNT 来实现您的要求,e.g:

USE OrderForm
IF EXISTS (SELECT [name] FROM sysobjects
    WHERE [name] = 'proc_GetNewsSourceOfSummary' AND type = 'P')
  DROP PROCEDURE proc_GetNewsSourceOfSummary
GO
CREATE PROCEDURE [dbo].[proc_GetNewsSourceOfSummary]
(
  @Count  int,  -- 用于指定返回查询所得记录的条数
  @DataLen int,  -- 用于指定 DATALENGTH 函数返回的字节数(注意,我转换成varchar数据类型,2个英文字母占用一个字节)
  @Length  int,  -- 用于指定 SUBSTRING 函数返回的字符数或字节数
  @PtCode  varchar(30), -- 用于指定产品编码的字符串
  @newClsCode varchar(30) -- 用于指定信息分类编号(从 InfoClass 表中获取)
)
AS
BEGIN
  SET ROWCOUNT @Count

  SELECT a.IT_ID, Summary =
      CASE
          WHEN DATALENGTH(CAST(a.Other AS varchar(120))) <= @DataLen THEN a.Other
          WHEN DATALENGTH(CAST(a.Other AS varchar(120))) > @DataLen THEN SUBSTRING(a.Other, 1, @Length + (@DataLen - 

DATALENGTH(SUBSTRING(CAST(a.Other AS varchar(120)), 1, @Length)))/2) + '…'
      END
  FROM reglogin.dbo.InfoTable AS a
    WHERE a.newClsCode LIKE @newClsCode + '%'
      AND a.PtCode LIKE @PtCode + '%'
      AND a.isMake > 0
      AND a.isDel = 0
      AND a.isCheck = 1
      AND a.IfPage = 1 -- 表示是否将该新闻推荐到相应的频道页
  ORDER BY a.IT_ID DESC

  SET ROWCOUNT 0 -- 执行 SET ROWCOUNT 0 将会关闭 SET ROWCOUNT 选项的影响
END
GO
-- 测试存储过程
EXEC OrderForm.dbo.proc_GetNewsSourceOfSummary 1, 90, 45, '002', '101002016'

1 2 3 4 5 6  下一页

Tags:关于 SQL 小九九

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接