0


0

リンクサーバーを使用して、ソースデータベースからターゲットデータベースへの挿入をスクリプト化しようとしています。 初めてSQLの2番目の名前付きインスタンスを使用していますが、次のコードを実行すると "Internal SQL Server Error"が発生します。 名前付きインスタンスの周囲の角かっこを削除すると、内部SQL Serverエラーは発生しなくなりますが、「 '\'付近の構文が正しくありません」というエラーメッセージが表示されます。エラー。 任意の助けは大歓迎です。

@listnameをvarchar(80)として宣言する@sourcedbをsysnameとして宣言する@targetdbをsysnameとして宣言する

set @listname = 'List(r)スタッフ - 計画'

'set @sourcedb =' [server1.domain.com \ server1sql2005] .database.dbo 'です。 set @targetdb = 'server2.database.dbo'

@listnameを印刷

exec( '存在しない場合(' @targetdb 'listmatchingheaderから選択* listname =' '' @listname '' ')挿入' @targetdb 'listmatchingheader(リスト名、ユーザー定義名1、ユーザー定義名2、ユーザー定義名3、サイト登録名、リスト日付、登録日) 、customlist、footer) 'mlmh.listname、mlmh.userdefinedname1、mlmh.userdefinedname2、mlmh.userdefinedname3、mlmh.siterecnum、mlmh.dolplistnum、mlmh.listdate、mlmh.regdate、mlmh.customlist、mlmh.footsから選択します。 listmatchingheader mlmhここでmlmh.listname = '' '@listname' ''他の更新を開始します '@targetdb' listmatchingheader set listname = mlmh.listname、userdefinedname1 = mlmh.userdefinedname1、userdefinedname2 = mlmh.userdefinedname3 = mlmh.dusername 3 efinedname3、siterecnum = mlmh.siterecnum、dolplistnum = mlmh.dolplistnum、listdate = mlmh.listdate、regdate = mlmh.regdate、customlist = mlmh.customlist、footer = mlmh.footerから '@targetdb' listmatchingheader lmhに参加しましたlistmatchingheader mlmh on lmh.listname = mlmh.listnameここで、mlmh.listname = '' '@listname' '' end ')

exec( '@targetdb'リストマッチングlmインナージョイン '@targetdb'リストマッチングヘッダーlmhからlm.listrecnum = lmh.listrecnumを削除 'llist.listname =' '@listname' '' 'から' @targetdb 'リストマッチングを削除)

exec( '@targetdb' listitemcass licから存在しない場所で 'delete' @targetdb 'listitemcassを選択します(listitemrecnum = lic.listitemrecnumから*を選択))

exec( '@targetdb' listitemingreds liiから存在しないところで 'listitemredsを削除'(listitemrecnum = lii.listitemrecnumから選択*)

exec( 'insert' @targetdb 'リストマッチング(listrecnum、cas、成分、userdefineddata1、userdefineddata2、userdefineddata3)を選択してください。 'listmatching mlm内部結合' @sourcedb 'listmatchingheader mlmh(mlm.listrecnum = mlmh.listrecnumおよびmlmh.listname =' '' @listname '' ''内部結合 '@targetdb' listmatchingheader lmh(mlmh.listname = lmh.listname)

exec( 'insert' @targetdb 'listitemcass(listitemrecnum、cas、abstrue)' lm.listitemrecnum、mlic.cas、mlic.abstrueから '@sourcedb' listitemcass mlic内部結合 '@sourcedb' mllをmlic.listitemrecnum = mlmに選択します。 listitemrecnum内部結合 '@sourcedb' listmatchingheader mlmh(mlm.listrecnum = mlmh.listrecnumおよびmlmh.listname = '' @listname '' '内部結合' @targetdb 'listmatchingheader lmh(mlmh.listname = lmh.listname内部結合) lmh.listrecnum = lm.listrecnumおよびmlm.cas = lm.casおよびmlm.ingredient = lm.ingredientおよびmlm.userdefineddata1 = lm.userdefineddata1およびmlm.userdefineddata2およびmlm.userdfineddata2およびmlm.userdefineddata2およびmlm.userdfineddata2でのtargetdbのリスト・マッチングlm .userdefineddata3 ')

exec( 'insert' @targetdb 'listitemingreds(listitemrecnum、componenttext、abstrue)' lm.listitemrecnum、mlii.ingredienttext、mlii.abstrueから '@sourcedb' listitemingreds mlii内部結合 '@sourcedb'をmlii.listitemrecnumに一致させます。 listitemrecnum内部結合 '@sourcedb' listmatchingheader mlmh(mlm.listrecnum = mlmh.listrecnumおよびmlmh.listname = '' @listname '' '内部結合' @targetdb 'listmatchingheader lmh(mlmh.listname = lmh.listname内部結合) lmh.listrecnum = lm.listrecnumおよびmlm.cas = lm.casおよびmlm.ingredient = lm.ingredientおよびmlm.userdefineddata1 = lm.userdefineddata1およびmlm.userdefineddata2およびmlm.userdfineddata2およびmlm.userdefineddata2およびmlm.userdfineddata2でのtargetdbのリスト・マッチングlm .userdefineddata3 ')

2 回答


0


名前が@SourceDBおよび@TargetDB変数に正しく書き込まれていることを確認してください。

リンクサーバーとして登録されている名前の一覧を取得するには、次のコードを使用します。

sp_linkedservers
http://msdn.microsoft.com/ja-jp/library/aa238819%28SQL.80%29.aspx[手順の詳細]


0


したがって、実際にはSQL 2000インスタンスからクエリを実行していて、ソースデータベースはSQL 2005インスタンスで実行されているという点で、私は愚かなことをしていたことがわかりました。 2005年のインスタンスからクエリを実行したところ、うまくいきました。 ご協力ありがとうございます