我有一个SQL Server Compact Edition 4.0数据库文件,其扩展名为.sdf
。数据库由图书编目应用程序创建。数据库有许多表,其中有一个名为Book
的表,其中包含数据库中每本书的一行。该表中有许多列,其中包含一个名为FrontCover
的列,其中包含一个字符串值,该字符串值包含2个部分:path part
和file 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命令吗?
非常感谢您的帮助。
最好的问候
答案 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 \')