Sql server SQL Server 2008 R2-传递的长度参数无效
情况: 我有一个数据库,里面有一堆图像,我正在将它们导出到文件夹中。有一个图像列和一个源图像列。在“源图像”列中,大多数记录如下所示:Sql server SQL Server 2008 R2-传递的长度参数无效,sql-server,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 Column 2
C:\blah\blah\test.pdf BlobField
导出文件时,我想将其命名为test.pdf,我可以通过以下方式实现:
RIGHT(SOURCE_DOCUMENT, (CHARINDEX('\',REVERSE(SOURCE_DOCUMENT),0))-1)
这很有效
但在一些记录中,它们看起来就像
Column 1
Message.txt
我得到一个无效的长度参数passed错误,因为我猜它没有\
有人知道如何解决这个问题吗?如果列有
\
字符,您可以使用大小写表达式获取一个值(您的右(…)
函数),如果列没有\
字符,则可以使用另一个值(可能是整个字符串)。您可以使用大小写表达式获取一个值(您的右(…)
函数)如果列有\
字符,如果没有,则返回不同的值(可能是整个字符串)。检查文档名称中是否有\
,如果仅为文件名,则返回未修改的值:
IIF(CHARINDEX('\', SOURCE_DOCUMENT) > 0, RIGHT(SOURCE_DOCUMENT, (CHARINDEX('\',REVERSE(SOURCE_DOCUMENT),0))-1), SOURCE_DOCUMENT)
检查文档名称中是否有
\
,如果仅为文件名,则返回未修改的文档:
IIF(CHARINDEX('\', SOURCE_DOCUMENT) > 0, RIGHT(SOURCE_DOCUMENT, (CHARINDEX('\',REVERSE(SOURCE_DOCUMENT),0))-1), SOURCE_DOCUMENT)
只需将
\
附加到源文档的末尾,以防止出错:
SELECT RIGHT(SOURCE_DOCUMENT, (CHARINDEX('\',REVERSE(SOURCE_DOCUMENT) +'\', 0))-1)
只需将\
附加到源文档的末尾,以防止出错:
SELECT RIGHT(SOURCE_DOCUMENT, (CHARINDEX('\',REVERSE(SOURCE_DOCUMENT) +'\', 0))-1)
您可以使用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(…)
语句,或仅返回不包含反斜杠的列。您可以使用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(…)
语句,或者只返回不包含反斜杠的列