SQL Server 2008 带的 Management Studio 生成脚本功能已经支持编写数据的脚本了,但是 2008 R2 里面找了半天没找到编写数据脚本的选项,后来仔细一看,原来藏这里了。

相对于 2008 来说,更加了灵活了。想生成啥就生成啥。

本日志由 Loveyuki 于 2010-07-14 09:25 发表到 学习笔记 中,目前已经被浏览 390 次,评论 6 次;

作者添加了以下标签: SQL Server

前两天我发了一个使用 CTE 分割字符串的方法,效率虽然比旧的 CHARINDEX 高一些,但是比起 CLR 速度还是差了很多,今天我就发下使用 CLR 来分割字符串的方法

  1. public class UserFunction 
  2.     [SqlFunction(Name = "CLR_SplitStringToIntTable", TableDefinition = "Id INT", FillRowMethodName = "FillRow")] 
  3.     public static IEnumerable SplitStringToIntTable(SqlString str) 
  4.     { 
  5.         return str.Value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 
  6.     } 
  7.  
  8.     public static void FillRow(object row, out int id) 
  9.     { 
  10.         id = Convert.ToInt32((string)row); 
  11.     } 

把上面的 C# 代码编译后放到 SQL 服务器,然后到 SQL 管理器里面建立程序集,再建立一个新的函数

  1. CREATE FUNCTION CLR_SplitStringToIntTable 
  2. (    
  3.     @Str NVARCHAR(MAX
  4. RETURNS TABLE (Id INT
  5. AS EXTERNAL NAME SQLServerCLR.UserFunction.SplitStringToIntTable; 
  6. GO 

效率对比我就不贴了,我这里提高的速度可不是一点。

本日志由 Loveyuki 于 2010-06-03 11:33 发表到 学习笔记 中,目前已经被浏览 616 次,评论 5 次;

作者添加了以下标签: SQL Server

记录一下,效率比旧的字符串分割效率高

  1. ALTER FUNCTION [dbo].[UF_SpliteIntToTable] 
  2.     @String VARCHAR(8000) 
  3. RETURNS @Table TABLE (Id INT
  4. AS 
  5. BEGIN 
  6.     DECLARE @SpliteChar AS CHAR(1) = ','
  7.          
  8.     WITH TempTable AS 
  9.     ( 
  10.         SELECT CAST(SUBSTRING(@String,1,CHARINDEX(@SpliteChar,@String,1) - 1) AS INTAS item, 
  11.         SUBSTRING(@String,CHARINDEX(@SpliteChar,@String,1) + 1, LEN(@String)) + @SpliteChar AS list 
  12.  
  13.         UNION ALL 
  14.  
  15.         SELECT CAST(SUBSTRING(list,1,CHARINDEX(@SpliteChar,list,1) - 1) AS INTAS item, 
  16.         SUBSTRING(list,CHARINDEX(@SpliteChar,list,1) + 1, LEN(list)) AS list 
  17.         FROM TempTable 
  18.         WHERE LEN(TempTable.list) > 0 
  19.     ) 
  20.  
  21.     INSERT INTO @Table SELECT item FROM TempTable WHERE item > 0 
  22.          
  23.     RETURN 
  24. END 

本日志由 Loveyuki 于 2010-05-28 16:15 发表到 学习笔记 中,目前已经被浏览 579 次,评论 3 次;

作者添加了以下标签: SQL Server

图片文件导入数据库用:

  1. INSERT INTO tblFiles(blob) 
  2.     SELECT * FROM OPENROWSET(BULK 'D:\BakFile\sfile\1.png', SINGLE_BLOB) 
  3.     AS tmpImage 

数据库字段导出图片文件用:

  1. SET @sql = 'bcp ' 
  2. SET @sql = @sql + '"SELECT blob FROM SomeTestDB.dbo.tblFiles WHERE id= 1"' 
  3. SET @sql = @sql + ' queryout ' 
  4. SET @sql = @sql + '"D:\BakFile\tfile\1.png"' 
  5. SET @sql = @sql + ' -T -f D:\BakFile\tfile\bcp.fmt -S' 
  6.      
  7. exec master..xp_cmdshell @sql 

bcp.fmt 文件可以自动生成后进行定制修改:

  1. SET @sql ='bcp SomeTestDB.dbo.tblFiles format nul -T -N  -f D:\BakFile\tfile\bcp.fmt' 
  2. exec master..xp_cmdshell @sql 

生成的文件如下:

  1. 10.0 
  2. 1       SQLINT              0       4       ""   1     id           "" 
  3. 2       SQLIMAGE            4       0       ""   2     blob         "" 

因为我们只导出 blob 字段为图片文件,所以修改为:

  1. 10.0 
  2. 1       SQLIMAGE            0       0       ""   1     blob         "" 

具体大家可以看 MSDN 文档

本日志由 Loveyuki 于 2010-04-09 17:19 发表到 学习笔记 中,目前已经被浏览 789 次,评论 0 次;

作者添加了以下标签: SQL Server

以前有朋友反馈过在 Mono 下无法运行 Bitrac,这两天测试 Bitrac 的兼容性的时候顺便也测试了一下 Bitrac 在 Mono 下的表现,系统嘛还是选择我最喜欢的 Archlinux,Web 服务器就用 Lighttpd 了,用 FastCGI-Mono-Server 来跑 Bitrac,服务器的配置方法,我去年年初就发过了,这里就不再累赘。

装好服务器,传好 Bitrac,运行,哦也,错误。SQLite 库不行,到他主页一看哦,应该用可管理的那个库,而不是集成的库,换,再运行还是错误,这次是路径有错误了,唉,不规范代码害死人了,把所有不规范的代码都换了,然后把权限设置好,哈哈,成功运行,不过速度好慢啊,第一次启动时间竟然需要 3 秒,稳定运行后,每个页面都要 50 毫秒左右,性能比 IIS 下面要低两倍。看来用 Linux 跑 .NET 的应用还是很不现实啊。

另外就是 SQLite 数据库连接字符串的 Pooling=True 问题了,发现打开这个以后,会造成数据库文件被锁定,很容易出现错误,虽然开启那个选项可以提高两毫秒的速度,但是为了稳定性,还是关闭了吧。下个版本很快发布,到时候有兴趣和条件的朋友可以试试在 Mono 下跑 Bitrac 了。呵呵

另外就是有些朋友的主机无法运行自动运行程序,我考虑在自动更新功能里面加入本地自动更新功能,就是你在我这里下载自动更新包以后上传到你的服务器更新,一切为了方便嘛,哈哈。

本日志由 Loveyuki 于 2009-06-24 15:24 发表到 学习笔记 中,目前已经被浏览 2180 次,评论 7 次;

作者添加了以下标签: BitracMonoLighttpdLinuxSQLite

171/4