質問: 私たちにはたくさんのデータがあり、バックアップの作成にかかる時間を節約するため、指定された会社コード/会社のみを含む現在のデータベースのコピーを作成することが任されています。 TSQLスクリプト、情報スキーマ、バルクコピーを調べるように指示されています。最善のルートがどのようなものになるのだろうと思っています。私は最新のデータベースコピーをローカルに持っています。 スクリプトは 一番上に新しいデータベースの名前と会社コードからの会社コードまたはIDのリストを指定することができます。 新しいデータベースを作成し、関連するデータのみをコピーする
回答: おそらく最善の方法に近いものではありませんが、あなたがそれをやり遂げることができる100の方法のうちの1つです。 ``` declare @databasename nvarchar(100) = 'roflcopter' , @destination = 'myschema.mytable' declare @companylist nvarchar(max) = (select stuff( select ',' +convert(nvarchar(5),companyid) from companytable where database = @databasename),1,1,'') declare @query nvarchar(max) = N'use ['+@databasename+'] insert into '+@destination+' /* maybe add dynamic columns here */ select /*same dynamic columns */ from mytable /*or another variable*/ where companyid in('''+@companylist+''') ' exec (@query) ``` 将来のデータベース名(作成する場合など)と必要なものを宣言するためにあなたの他の変数などを追加してください...動的SQLは遅くて扱いにくく再接続します。 exec()とexecutedqlの違いについてsp_executesqlをチェックしたい場合があります システムプロシージャーの大部分があります... FK、列名、データ型、pksを見つけるもの...あなたは現在のスキーマを(これらのシステムプロシージャの助けなしに)動的に構築することによって複雑にすることができます。簡単に「スクリプトを生成」して実行することができます。 あなたが考えていた間違った方向にあるかもしれません。