sql中压缩日志文件和ntextl转化为varchar的处理
1、清空数据库日志
--清空日志
DUMP TRANSACTION 库名 WITH NO_LOG
--截断事务日志
BACKUP LOG 数据库名 WITH NO_LOG
--收缩数据库
DBCC SHRINKDATABASE(数据库名)
DUMP TRANSACTION 库名 WITH NO_LOG
--截断事务日志
BACKUP LOG 数据库名 WITH NO_LOG
--收缩数据库
DBCC SHRINKDATABASE(数据库名)
2、使用ntext型字段
--B. 返回文本数据
--下例从 pub_info 表中选择 pub_id 列和 pr_info 列的 16 字节文本指针。
USE pubs
GO
SELECT pub_id, TEXTPTR(pr_info)
FROM pub_info
ORDER BY pub_id
GO
--下例显示如何在不使用 TEXTPTR 的情况下返回文本的前 8,000 个字节。
USE pubs
GO
SET TEXTSIZE 8000
SELECT pub_id, pr_info
FROM pub_info
ORDER BY pub_id
GO
--下例从 pub_info 表中选择 pub_id 列和 pr_info 列的 16 字节文本指针。
USE pubs
GO
SELECT pub_id, TEXTPTR(pr_info)
FROM pub_info
ORDER BY pub_id
GO
--下例显示如何在不使用 TEXTPTR 的情况下返回文本的前 8,000 个字节。
USE pubs
GO
SET TEXTSIZE 8000
SELECT pub_id, pr_info
FROM pub_info
ORDER BY pub_id
GO
-- -- DECLARE @ptr binary(16)
-- --
-- -- -- select max(DATALENGTH(p_singleintro)) from ProductInfo
-- -- -- group by P_ID
-- -- select @ptr=TEXTPTR(p_singleintro) from ProductInfo
-- -- -- where p_id=128
-- C、ntext变量和varchar变量如何相加
--ntext可以很大,而varchar最大8000个英文字符,当ntext很大时
-- 把ntext转化为varchar可能会把ntext截断而发生数据丢失,我的做法是使用updatetext,例如:
DECLARE @ptr binary(16)
DECLARE @val varchar(100)
SET @val = 'abcdefg'
SELECT @ptr = TEXTPTR(p_intro)
FROM ProductInfo
WHERE p_id=128
--注:p_intro(备注)是表ProductInfo中的一个ntext列,p_id是ProductInfo的主键
UPDATETEXT ProductInfo.p_intro @ptr 0 0 @val
--注:这是把@val插入到p_intro列值的开头
--或者
UPDATETEXT ProductInfo.p_intro @ptr null 0 @val
--注:这是把@val追加到p_intro列值的末尾
--上述方法变相的实现了ntext和varchar的相加,结果类型是ntext