4

我有一个具有.sdf扩展名的 SQL Server Compact Edition 4.0 数据库文件。该数据库由图书编目应用程序创建。数据库有许多表,其中有一个名为的表,Book其中包含数据库中每本书的一行。该表有很多列,其中一个名为的列FrontCover包含一个字符串值,该值有两个部分: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'

因此,第一个示例中 book列的字符串值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 查询分析器可以打开.sdf数据库文件并接受 SQL 命令以修改.sdf数据库文件。

你能帮我用可以完成这项工作的 SQL 命令吗?

非常感谢您的帮助。

此致

4

2 回答 2

3
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 子句可能不是必需的,但它确保您只替换以“文档和设置...”开头的字符串

于 2012-12-26T07:30:50.833 回答
0

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

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

原因是 FrontCover 列的日期类型是 NTEXT(我忘了在我的问题中指定)并且函数 REPLACE 不允许 NTEXT 变量。所以我们必须在将 FrontCover 变量传递给 REPLACE 之前使用以下命令对其进行转换:

CAST(封面为 NVARCHAR(100))

因此我的问题的答案是:

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

于 2012-12-26T14:17:07.567 回答