65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Transact-SQL 从用户定义的 文件路径中获取文件名或文件扩展名的简便方法

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.76/5 (18投票s)

2009年8月9日

CPOL

1分钟阅读

viewsIcon

54934

downloadIcon

138

本文将演示如何使用 Transact-SQL 获取文件名或文件扩展名。

引言

本文将演示如何使用 Transact-SQL 获取文件名或文件扩展名。

背景

在将文件以二进制格式存储到 SQL Server 数据库时,开发人员有时需要仅从文件路径中获取文件名或文件扩展名,并将文件名和文件扩展名作为记录以供进一步参考。如今,Microsoft .NET Framework 提供了许多优秀的方法来获取文件名或其扩展名。我们可以考虑一个场景,我有一个应用程序,可能是 Windows 或 Web,我使用 Visual Basic 6.0 / vbScript,其中一项新功能是将用户定义的文件以二进制格式存储到 SQL Server 数据库中。因此,我们需要开发一个函数来返回文件名/扩展名。在这种情况下,我的关注点是,也可以使用 Transact-SQL 实现。

Using the Code

使用代码非常简单;如果您查看脚本,您会看到我使用了非常常见的技术,即字符串反转逻辑来执行此操作。我编写了两个存储过程

  • dbo.spGetDocumentName
  • dbo.spGetDocumentNature

以下是一个示例代码:

示例 - 1

-- =============================================
-- Author: Md. Marufuzzaman>
-- Create date:
-- Description: Return the file name from a given location.
-- =============================================
/*
DECLARE @VAL VARCHAR(MAX) 
EXEC dbo.spGetDocumentName 'E:\Guideline & Programming Tools & _
    Resources\Resource - 2\Microsoft Visual Basic 6.0 Source\myFile.pdf', @VAL OUTPUT
PRINT @VAL
*/
CREATE PROCEDURE [dbo].[spGetDocumentName]
 -- Add the parameters for the stored procedure here
  @FILE_PATH   VARCHAR(MAX) 
 ,@NAME        VARCHAR(MAX) OUTPUT
AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;
--DECLARE @FILE_PATH VARCHAR(MAX)
DECLARE @FILE_LENGTH INT
DECLARE @FILE_NAME VARCHAR(MAX)
 
 SET @FILE_LENGTH = LEN(@FILE_PATH)
 WHILE (@FILE_LENGTH <> 0)
 BEGIN
  IF SUBSTRING(@FILE_PATH, @FILE_LENGTH, 1) = '\' 
   BEGIN
    SET @FILE_NAME = RIGHT(@FILE_PATH, LEN(@FILE_PATH) - @FILE_LENGTH)
    BREAK
   END
 SET @FILE_LENGTH = @FILE_LENGTH - 1
 END
   
 SET @NAME = @FILE_NAME
 RETURN 
END
GO

示例 - 2

-- =============================================
-- Author: Md. Marufuzzaman>
-- Create date: 
-- Description: Return the nature of the file from a given location.
-- =============================================
/*
DECLARE @VAL VARCHAR(MAX) 
EXEC dbo.spGetDocumentNature'E:\Guideline & Programming Tools & _
    Resources\Resource - 2\Microsoft Visual Basic 6.0 Source\myFile.pdf', @VAL OUTPUT
PRINT @VAL
*/
CREATE PROCEDURE [dbo].[spGetDocumentNature]
 -- Add the parameters for the stored procedure here
  @FILE_PATH   VARCHAR(MAX) 
 ,@EXTN       VARCHAR(10) OUTPUT
AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;
--DECLARE @FILE_PATH VARCHAR(MAX)
DECLARE @FILE_LENGTH INT
DECLARE @FILE_NATURE VARCHAR(10)
 
 SET @FILE_LENGTH = LEN(@FILE_PATH)
 WHILE (@FILE_LENGTH <> 0)
 BEGIN
  IF SUBSTRING(@FILE_PATH, @FILE_LENGTH, 1) = '.' 
   BEGIN
    SET @FILE_NATURE = RIGHT(@FILE_PATH, LEN(@FILE_PATH) - @FILE_LENGTH)
    BREAK
   END
 SET @FILE_LENGTH = @FILE_LENGTH - 1
 END
    
 SET @EXTN = @FILE_NATURE
 RETURN 
END

结论

希望您喜欢。尽情享受吧!

历史

  • 2009 年 8 月 9 日:初始发布
© . All rights reserved.