本日志由 Loveyuki 于 2009-06-22 08:53 发表到 原创作品 中,目前已经被浏览 10443 次,评论 228 次;

作者添加了以下标签: Bitrac博客程序

首页只显示了部分日志内容,要查看日志的全部内容请阅读全文

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

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

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

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

先放照片,等会写文字

本日志由 Loveyuki 于 2010-06-21 11:47 发表到 生活娱乐 中,目前已经被浏览 442 次,评论 16 次;

作者添加了以下标签: 旅游西安

首页只显示了部分日志内容,要查看日志的全部内容请阅读全文

前两天我发了一个使用 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 发表到 学习笔记 中,目前已经被浏览 390 次,评论 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 发表到 学习笔记 中,目前已经被浏览 356 次,评论 3 次;

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

1761/36