4

拡張子を持つ SQL Server Compact Edition 4.0 データベース ファイルがあります.sdf。データベースは書籍カタログ アプリケーションによって作成されます。データベースには多くのテーブルがBookあります。その中には、データベース内の書籍ごとに 1 つの行を含む と呼ばれるテーブルがあります。テーブルには多くの列があり、その中には と呼ばれる列があり、この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 コマンドを教えてください。

よろしくお願いいたします。

よろしくお願いします

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 句は必要ないかもしれませんが、'Documents and Settings...' で始まる文字列のみを置換することが保証されます。

于 2012-12-26T07:30:50.833 に答える
0

Paul Brownによって投稿された回答は問題ありませんが、次のエラーコードが生成されました。

ErrorCode:-2147467259 [SQL Server CompactADO.NETデータプロバイダー]HResult:-2147217900、NativeError:25922 ErrorMessage:関数に指定された引数値が無効です。[引数#= 1、関数の名前(わかっている場合)= REPLACE]

これは、FrontCover列の日付のタイプがNTEXT(質問で指定するのを忘れた)であり、関数REPLACEがNTEXT変数を許可しないためです。したがって、REPLACEに渡す前に、次のコマンドでFrontCover変数を変換する必要があります。

CAST(FrontCover AS 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 に答える