いくつかの同一のdbを持つリンクされたsql2008r2サーバーから新しいsql2014サーバーにデータを移動するためのprocがあります。すべての新しいデータベースとオブジェクトを作成し、インポート時にデータを変換/処理します。ソースデータベース名で実行し、残りは実行します。最近は昨晩も問題なく、数ヶ月間使ってきました。SQL2014ストアドプロシージャー - 実際に昨日働いていたコードでエラーが発生しました
コードの一部は、最後のレポートの各テーブルのレコード数の前後を選択します。
今日、前/後のカウントによって、ストアドプロシージャを実行したり変更したりすることができなくなっています。 (複数のエラーは、各テーブルの後にこれを実行するため)。
ここでは、それが気になる行です。おそらく、テンポラリテーブルを使用するよりも、これを行うより良い方法がありますか?コードの前の行が実行されるまで、テーブルと列が技術的に存在していないが、それは今日までその気にしませんでしたので、私は取得しています
exec('select count(*) as beforerecs into ##t from [sourceserver\localities].' + @dbname + '.dbo.' + @Tabname + ';')
select @sCount=beforerecs from ##t --line 96
drop table ##t
exec('select count(*) as afterrecs into ##t from ' + @destdbname + '.dbo.' + @Tabname + ';')
select @dcount=afterrecs from ##t --line 99
drop table ##t
エラーが訴えている:
Msg 207、レベル16、状態1、プロシージャMigrateLocalityDB、96行 無効な列名 'beforerecs'。
Msg 207、レベル16、状態1、プロシージャMigrateLocalityDB、行99 無効な列名 'afterrecs'。
これは、データベースとテーブル名変数を使用してレコード数を取得する際に私が考えていた唯一の方法でした。より良い方法のための提案は大歓迎です!前もって感謝します。
グローバル一時テーブルは、作成された後のすべてのユーザーおよび接続に表示され、そのテーブルを参照しているすべてのユーザーがSQL Serverのインスタンスから切断されると削除されます。誰か他の人や他のクエリがテーブルを変更したことを確認していますか?このスクリプトを最後に実行したときからSQL Serverでセッションを終了しましたか? – Balde
はい、使用していたサーバーとクライアントの両方が最近再起動されており、他の誰も修正を行っていません。 – spudchick
私は、テンポラリテーブルで作成された列を参照する行96と99のインスタンスをコメントアウトしようとしましたが、エラーは停止します。もちろん、それは問題を解決しませんが、一時テーブルが原因ではないことを示しています。 – spudchick