SQLServer2012ÐÂÌØÐÔ£¨1£©T-SQL²Ù×÷FileTableĿ¼ʵÀý(Ò»)

2014-11-23 22:20:20 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 48
ÔÚSQL Server 2008ÌṩFileStream,ÒÔ½èÖúWindowsϵͳ±¾ÉíµÄAPIÀ´Ç¿»¯SQL Server¶ÔÓڷǽṹ»¯Êý¾ÝµÄÖ§³Öºó£¬SQL Server 2012¸üÊÇÍÆ³öÁËÏñContained Database¡¢FileTableµÈÁîÈËÆÚ´ýµÄй¦ÄÜ¡£¶ÔÓÚFileTableµÄ¹¦ÄܺÍÌØÐÔ£¬ÔÚ´ËÎÞÐè׸Êö£¬±¾ÎÄÖ÷ÒªÕë¶ÔFileTableµÄT-SQL²Ù×÷Ŀ¼×öÒ»¸öʵÀýÑÝʾ¡£
\ \ \%20\\»úÆ÷Ãû\SQLʵÀýÃû\File%20Table Êý¾Ý¿âĿ¼\File%20TalbeĿ¼Ãû%20%20´ËĿ¼²ã´Î½á¹¹¹¹³ÉÁË%20FileTable%20µÄÎļþÃüÃû¿Õ¼äµÄ¸ù¡£%20ÔÚ´ËĿ¼²ã´Î½á¹¹Ï£¬FileTable%20µÄ%20FILESTREAM%20Êý¾Ý×÷ΪÎļþ´æ´¢£¬²¢ÇҴ洢ΪҲ°üº¬ÎļþºÍ×ÓĿ¼µÄ×ÓĿ¼¡£%20%20ÇëÎñ±Ø¼Çס£ºÔÚ´ËʵÀý¼¶±ð%20FILESTREAM%20¹²ÏíÇø(¼´±¾ÊµÀýÖеġ°NET2012¡±)Ï´´½¨µÄĿ¼²ã´Î½á¹¹ÊÇÐéÄâĿ¼²ã´Î½á¹¹¡£%20¸Ã²ã´Î½á¹¹´æ´¢ÓÚ%20SQL%20Server%20Êý¾Ý¿âÖУ¬²¢ÇÒÔÚÎïÀíÉϲ»ÔÚ%20NTFS%20ÎļþϵͳÖбíʾ¡£%20·ÃÎÊ%20FILESTREAM%20¹²ÏíÇøÖ®ÏÂºÍÆä°üº¬µÄ%20FileTable%20ÖеÄÎļþºÍĿ¼µÄËùÓвÙ×÷¶¼½«±»ÎļþϵͳÖÐǶÈëµÄ%20SQL%20Server%20×é¼þÀ¹½ØºÍ´¦Àí¡£%20%20select%20*%20from%20[dbo].MyFileTable01;%20%20×¢Ò⣺ÉÏͼ²¢Ã»ÓÐĿ¼½á¹¹£¬»»¾ä»°Ëµ£¬¶¼ÊÇλÓÚ¸ùĿ¼Ïµġ°Æ½¼¶¡±Îļþ¡£Èç¹ûÒª»ñÈ¡ÎļþµÄÍêÕû·¾¶£¬ÕâÐèÒª½áºÏʹÓÃ%20FileTableRootPath%20(Transact-SQL)%20ºÍ%20GetFileNamespacePath%20(Transact-SQL)%20º¯Êý²é¿´ÍêÕû·¾¶£º%20USE%20LearnFileTable;%20DECLARE%20@root%20nvarchar(100);%20DECLARE%20@fullpath%20nvarchar(1000);%20%20SELECT%20@root%20=%20FileTableRootPath();%20SELECT%20@fullpath%20=%20@root%20+%20file_stream.GetFileNamespacePath()%20%20%20%20%20FROM%20[dbo].MyFileTable01%20%20%20%20%20WHERE%20name%20=%20N'DemoExcel.xlsx';%20%20PRINT%20@fullpath;%20GO%20%20³ýÁËÊÖ¶¯´´½¨Ä¿Â¼¡¢»
¹¿ÉÒÔͨ¹ýT-SQL´´½¨FileTableĿ¼¡£%20ËÄ¡¢Í¨¹ýT-SQL´´½¨FileTableĿ¼%20Õâ¸ö¹ý³ÌÎÒÃÇ·ÖÈý²½£º%20£¨1£©´´½¨Ò»¸öÐÂĿ¼%20INSERT%20INTO%20dbo.MyFileTable01(name,%20is_directory)%20SELECT%20'MyDir01',%201;%20%20select%20stream_id,file_stream,name,path_locator,is_directory%20from%20[dbo].MyFileTable01;%20%20£¨2£©²åÈëÒ»¸ö¿Õ°×Îļþµ½ÐÂĿ¼£º%20%20DECLARE%20@path%20%20%20%20%20%20%20%20HIERARCHYID%20DECLARE%20@new_path%20%20%20%20VARCHAR(675)%20%20SELECT%20@path%20=%20path_locator%20FROM%20dbo.MyFileTable01%20WHERE%20name%20=%20'MyDir01'%20%20SELECT%20@new_path%20=%20@path.ToString()%20%20%20%20%20+%20CONVERT(VARCHAR(20),%20CONVERT(BIGINT,%20SUBSTRING(CONVERT(BINARY(16),%20NEWID()),%201,%206)))%20+%20'.'%20+%20CONVERT(VARCHAR(20),%20CONVERT(BIGINT,%20SUBSTRING(CONVERT(BINARY(16),%20NEWID()),%207,%206)))%20+%20'.'%20+%20CONVERT(VARCHAR(20),%20CONVERT(BIGINT,%20SUBSTRING(CONVERT(BINARY(16),%20NEWID()),%2013,%204)))%20+%20'/'%20%20INSERT%20INTO%20dbo.MyFileTable01(name,%20file_stream,%20path_locator)%20SELECT%20N'¿ÕÎļþ.txt',%200x,%20@new_path%20%20select%20stream_id,file_stream,name,path_locator,is_directory%20from%20[dbo].MyFileTable01;%20%20%20Èç¹ûÄã²»ÏëʹÓÃnewId(),¶øÒªÊ¹ÓÃSQL%20Server±¾ÉíÌṩµÄhierarchyid²ã´Î½á¹¹£¬¿ÉÒÔʹÓÃÏÂÃæÕâ¸öº¯Êý£º%20%20CREATE%20FUNCTION%20[dbo].[fnGetNewPathLocator]%20%20%20%20%20%20(@child%20uniqueidentifier%20%20%20%20%20,@parent%20hierarchyid%20=%20NULL)%20RETURNS%20%20%20%20hierarchyid%20AS%20BEGIN%20%20%20%20%20DECLARE%20%20%20%20@result%20hierarchyid,%20%20%20%20%20%20%20%20%20@binId%20binary(16)%20=%20CONVERT(binary(16),%20@child);%20%20%20%20%20SELECT%20@result%20=%20hierarchyid::Parse%20%20%20%20%20%20%20%20%20(%20%20%20%20%20%20%20%20%20%20%20%20%20COALESCE(@parent.ToString(),%20N'/')%20+%20%20%20%20%20%20%20%20%20%20%20%20%20CONVERT(nvarchar,%20CONVERT(bigint,%20SUBSTRING(@binId,%201,%206)))%20+%20N'.'%20+%20%20%20%20%20%20%20%20%20%20%20%20%20CONVERT(nvarchar,%20CONVERT(bigint,%20SUBSTRING(@b