关于 T-SQL 的几点小九九
2009-06-08 10:31:48 来源:WEB开发网忽然想起前不久一个朋友对我所说的话:一个转身或许就意味着一辈子……。时间流逝的总是无情无意,让你没有机会去申诉,转眼距离我上次落笔,已经近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'
- ››SQL Server 2008 R2 下如何清理数据库日志文件
- ››sqlite 存取中文的解决方法
- ››SQL2005、2008、2000 清空删除日志
- ››SQL Server 2005和SQL Server 2000数据的相互导入...
- ››sql server 2008 在安装了活动目录以后无法启动服...
- ››sqlserver 每30分自动生成一次
- ››sqlite 数据库 对 BOOL型 数据的插入处理正确用法...
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
更多精彩
赞助商链接