私は、存在しないテーブルにいくつかの挿入を実行するより適切な方法を探しています。 以前にテーブルを作成することは、選択した列のデータ型がわからないため、簡単にはできません。 「insert with create」はそうするでしょうが、私はそういうものはないと思います。テーブル作成で挿入するには?
これを選択して挿入するよりも良い方法はありますか?
この例では、問題に非常にストライプされた「悪い」方法を示します。
set nocount on
declare
@name sysname = '',
@i int = 0,
@sql nvarchar(4000) = ''
declare test cursor for
select top 10 a.name from sys.tables a inner join sys.columns b on a.object_id = b.object_id --and b.name = 'description'
open test
fetch next from test into @name
while (@@FETCH_STATUS <> -1)
begin
if @i = 0 begin
set @sql = 'select distinct top 10 description into #t1 from ' + @name + ''
select @sql
-- exec sp_executesql @sql
end
else begin
set @sql = 'insert #t1 select distinct top 10 description into #t1 from ' + @name + ''
select @sql
-- exec sp_executesql @sql
end
set @i = @i + 1
fetch next from test into @name
end
close test
deallocate test
if object_id ('tempdb..#t1') is not null select * from #t1
このソリューションは、2つの位置でステートメントが必要なので「悪い」です。ここに示されたケースでは、これは簡単です。 しかし、ステートメントがより複雑になると、これが問題になることがあります。
なぜ選択しないのですか? 。 。あなたは何をしたいのですか? –
何かがここで少しです。あなたは、あなたはデータ型を知らないが、すべての単一のテーブルの名前の列を持っていると言う?なぜあなたは、すべてのテーブルにdescriptionという名前の列があることが分かっているのですか?テーブル間でデータ型を変更する理由は何ですか? –
@Sean Lange:私はデータから読み返す必要がありますが、それは私の責任ではありません。アナウンスなしで変更がある可能性があります。 – Christian4145