SQL Server 2008 R2-传递了无效的长度参数

时间:2018-12-19 14:36:14

标签: sql-server

情况:

我有一个包含一堆图像的数据库,我正在将它们导出到文件夹中。有一个图像列和一个源图像列。在“源图像”列中,大多数记录如下所示:

Column 1                   Column 2
C:\blah\blah\test.pdf      BlobField

导出文件时,我想将其命名为test.pdf,我通过以下方式做到这一点:

 RIGHT(SOURCE_DOCUMENT, (CHARINDEX('\',REVERSE(SOURCE_DOCUMENT),0))-1)

哪个很棒。

但是在某些记录中,它们看起来就像

Column 1
Message.txt

我得到一个无效的长度参数传递错误,因为我猜它没有\。

有人知道如何解决吗?

4 个答案:

答案 0 :(得分:3)

只需在\的末尾附加SOURCE_DOCUMENT即可防止错误:

SELECT RIGHT(SOURCE_DOCUMENT, (CHARINDEX('\',REVERSE(SOURCE_DOCUMENT) +'\', 0))-1)

答案 1 :(得分:0)

如果列具有RIGHT(...)字符,则可以使用CASE表达式获取一个值(您的\函数),否则,可以使用不同的值(可能是整个字符串)。

答案 2 :(得分:0)

检查文档名称中是否有\,如果仅是文件名,请返回原样:

IIF(CHARINDEX('\', SOURCE_DOCUMENT) > 0, RIGHT(SOURCE_DOCUMENT, (CHARINDEX('\',REVERSE(SOURCE_DOCUMENT),0))-1), SOURCE_DOCUMENT)

答案 3 :(得分:0)

您可以使用CASE语句来实现此目的:

SELECT  CASE
          WHEN CHARINDEX('\', SOURCE_DOCUMENT) > 0 THEN RIGHT(SOURCE_DOCUMENT, (CHARINDEX('\',REVERSE(SOURCE_DOCUMENT),0))-1)
          ELSE SOURCE_DOCUMENT
        END AS SOURCE_DOCUMENT

这将利用您的RIGHT(...)语句,其中该列包含反斜杠,或者仅返回不包含反斜杠的列。