SQL Server Compact查询分析器:如何更改表中字符串值的一部分?

时间:2012-12-25 12:32:14

标签: sql

我有一个SQL Server Compact Edition 4.0数据库文件,其扩展名为.sdf。数据库由图书编目应用程序创建。数据库有许多表,其中有一个名为Book的表,其中包含数据库中每本书的一行。该表中有许多列,其中包含一个名为FrontCover的列,其中包含一个字符串值,该字符串值包含2个部分:path partfile name part图书文件封面的图像文件,例如:

Documents and Settings\Boson\My Documents\Books\Covers\0596003978.jpg

在此示例中,路径部分为:

'Documents and Settings\Boson\My Documents\Books\Covers'

文件部分为:

'0596003978.jpg'

有些图书不包含FrontCover列的任何值,因为封面不可用。对于此类图书,列FrontCover为空。但是,如果书籍具有封面图像文件,则字符串值具有相同的路径部分但具有不同的文件部分。例如,对于另一个图书列FrontCover,该列具有以下值:

'Documents and Settings\Boson\My Documents\Books\Covers\1590596633.jpg'

我们可以看到路径部分与第一个例子中的相同,即:

'Documents and Settings\Boson\My Documents\Books\Covers'

但文件部分不同:

'1590596633.jpg'

问题

我想更改整个表Book,以便为表中的每本书修改列FrontCover的字符串值,使文件部分保持相同但路径部分改为:

'Documents and Settings\Boson\My Documents\Books\Covers'

'Books\AEM database\Covers'

第一个示例中图书的列FrontCover的字符串值因此会改为:

'Documents and Settings\Boson\My Documents\Books\Covers\0596003978.jpg'

'Books\AEM database\Covers\0596003978.jpg'

文件部分相同但路径部分已更改。我想更改整个Book表,以便列FrontCover的字符串值的文件部分保持不变,但路径部分按上面指定的方式更改。

拥有.sdf数据库文件的图书编目应用程序是愚蠢的,无法完成工作。因此,我安装了一个名为SQL Compact Query Analyzer(http://sqlcequery.codeplex.com/)的简单开源SQL查看/编辑应用程序。 SQL Compact Query Analyzer可以打开.sdf数据库文件并接受SQL命令以修改.sdf数据库文件。

你能帮我解决一下可以完成工作的SQL命令吗?

非常感谢您的帮助。

最好的问候

2 个答案:

答案 0 :(得分:2)

UPDATE Book SET FrontCover = REPLACE(
    CAST(FrontCover AS NVARCHAR(300)),
    'Documents and Settings\Boson\My Documents\Books\Covers',
    'Books\AEM database\Covers')
WHERE FrontCover like
    'Documents and Settings%'

注意:where子句可能没有必要,但它确保您只替换以'Documents and Settings ...'开头的字符串

答案 1 :(得分:0)

Paul Brown发布的答案是可以的,但它产生了以下错误代码:

ErrorCode:-2147467259 [SQL Server Compact ADO.NET数据提供程序] HResult:-2147217900,NativeError:25922 ErrorMessage:函数的指定参数值无效。 [参数#= 1,函数名称(如果已知)= REPLACE]

原因是因为FrontCover列的日期类型是NTEXT(我忘了在我的问题中指定)和函数REPLACE不允许NTEXT变量。所以我们必须先将以下命令转换为FrontCover变量,然后再将其传递给REPLACE:

CAST(FrontCover AS NVARCHAR(100))

因此,我的问题的答案是:

更新书 SET FrontCover = REPLACE(CAST(FrontCover AS NVARCHAR(100)),'Documents and Settings \ Boson \ My Documents \ Books \ Covers \','Books \ AEM database \ Covers \')