C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

Table変数の複製できますか? /天海 (21/01/08(Fri) 08:54) #96668
Re[1]: Table変数の複製できますか? /ぶなっぷ (21/01/08(Fri) 09:22) #96669
Re[1]: Table変数の複製できますか? /Hongliang (21/01/08(Fri) 10:30) #96670
│└ Re[2]: Table変数の複製できますか? /天海 (21/01/08(Fri) 16:12) #96679
│  └ Re[3]: Table変数の複製できますか? /魔界の仮面弁士 (21/01/08(Fri) 16:38) #96680
│    └ Re[4]: Table変数の複製できますか? /天海 (21/01/08(Fri) 16:50) #96681
│      └ Re[5]: Table変数の複製できますか? /魔界の仮面弁士 (21/01/08(Fri) 16:54) #96683
Re[1]: Table変数の複製できますか? /shu (21/01/08(Fri) 14:15) #96675
  └ Re[2]: Table変数の複製できますか? /天海 (21/01/08(Fri) 16:52) #96682
    └ Re[3]: Table変数の複製できますか? /魔界の仮面弁士 (21/01/08(Fri) 16:55) #96684
      └ Re[4]: Table変数の複製できますか? /天海 (21/01/11(Mon) 11:23) #96697 解決済み


親記事 / ▼[ 96669 ] ▼[ 96670 ] ▼[ 96675 ]
■96668 / 親階層)  Table変数の複製できますか?
□投稿者/ 天海 (1回)-(2021/01/08(Fri) 08:54:45)

分類:[ネットワーク全般] 

2021/01/08(Fri) 08:55:22 編集(投稿者)
あけましておめでとうございます。

SQLServer を使用しています。

例えば以下のようにテーブル変数を作成するとして

DECLARE @TAB1 TABLE(
     CODE char(4) NOT NULL
    ,NAME varchar(50)
     :
     :
)

1.同じ構成のテーブル @TAB2 を使用する場合は
  複数使用する個数の分だけ同じコードを書かなければいけないのでしょうか?

  DECLARE @TAB2 TABLE(
       CODE char(4) NOT NULL
    ,NAME varchar(50)
     :
     :
  )

2.DECLARE @TAB2[10] TABLE ・・・
  のようにテーブルを配列で使用することができるとか...

よろしくお願いします。







[ □ Tree ] 返信 編集キー/

▲[ 96668 ] / 返信無し
■96669 / 1階層)  Re[1]: Table変数の複製できますか?
□投稿者/ ぶなっぷ (265回)-(2021/01/08(Fri) 09:22:45)
同じ構成のテーブルならそもそもテーブルを複数に分ける必要ないんじゃ?

> DECLARE @TAB2[10] TABLE ・・・
なんていう話が出る時点で、たまたまフィールドが同じというわけではなく、
テーブルの用途まで一緒ということですよね?

であれば、テーブルを1つにすべきかと。
例えば、成績表を考えます。
  ・名前
  ・点数
  ・偏差値
なんていうフィールドがあるとします。
で、用途まで一緒となると、
  国語成績表、算数成績表、...
なんていうテーブル群になるのかな?

それだったら、もう1フィールド足して、
  ・名前
  ・科目
  ・点数
  ・偏差値
とすれば、1テーブルで済みます。

それとも、そんな話ではない?

[ 親 96668 / □ Tree ] 返信 編集キー/

▲[ 96668 ] / ▼[ 96679 ]
■96670 / 1階層)  Re[1]: Table変数の複製できますか?
□投稿者/ Hongliang (1142回)-(2021/01/08(Fri) 10:30:17)
> 1.同じ構成のテーブル @TAB2 を使用する場合は
>   複数使用する個数の分だけ同じコードを書かなければいけないのでしょうか?

あらかじめユーザ定義型を定義しておく方法を採れます。

CREATE TYPE TMPTABLE AS TABLE (
     CODE char(4) NOT NULL
    ,NAME varchar(50)
);
GO

DECLARE @TAB1 TMPTABLE;
DECLARE @TAB2 TMPTABLE;

> 2.DECLARE @TAB2[10] TABLE ・・・
>   のようにテーブルを配列で使用することができるとか...

配列そのものは存在しないので、できないとしか言えません。
その配列をどうしたいのかによっては他の回答もできるかもしれません。

[ 親 96668 / □ Tree ] 返信 編集キー/

▲[ 96670 ] / ▼[ 96680 ]
■96679 / 2階層)  Re[2]: Table変数の複製できますか?
□投稿者/ 天海 (2回)-(2021/01/08(Fri) 16:12:07)
[型 'TMPTABLE' が既に存在するか、この型を作成する権限がありません。]
が表示されて実行できません。
どうすればよいのでしょうか?

No96670 (Hongliang さん) に返信
> > 1.同じ構成のテーブル @TAB2 を使用する場合は
>>  複数使用する個数の分だけ同じコードを書かなければいけないのでしょうか?
>
> あらかじめユーザ定義型を定義しておく方法を採れます。
>
> CREATE TYPE TMPTABLE AS TABLE (
> CODE char(4) NOT NULL
> ,NAME varchar(50)
> );
> GO
>
> DECLARE @TAB1 TMPTABLE;
> DECLARE @TAB2 TMPTABLE;
>
>>2.DECLARE @TAB2[10] TABLE ・・・
>>  のようにテーブルを配列で使用することができるとか...
>
> 配列そのものは存在しないので、できないとしか言えません。
> その配列をどうしたいのかによっては他の回答もできるかもしれません。
[ 親 96668 / □ Tree ] 返信 編集キー/

▲[ 96679 ] / ▼[ 96681 ]
■96680 / 3階層)  Re[3]: Table変数の複製できますか?
□投稿者/ 魔界の仮面弁士 (2948回)-(2021/01/08(Fri) 16:38:43)
2021/01/08(Fri) 16:39:02 編集(投稿者)

No96679 (天海 さん) に返信
> [型 'TMPTABLE' が既に存在するか、この型を作成する権限がありません。]
> が表示されて実行できません。

管理アカウントで入って
 CREATE TYPE schema_name.TMPTABLE AS
のようにしてみてください。

管理アカウントでは無い場合には、
現在のデータベース内の CREATE TYPE 権限と
現在のスキーマに対する ALTER 権限が必要です。
[ 親 96668 / □ Tree ] 返信 編集キー/

▲[ 96680 ] / ▼[ 96683 ]
■96681 / 4階層)  Re[4]: Table変数の複製できますか?
□投稿者/ 天海 (3回)-(2021/01/08(Fri) 16:50:45)
No96680 (魔界の仮面弁士 さん) に返信

DECLARE @TAB1 TMPTABLE;
DECLARE @TAB2 TMPTABLE;

SELECT *
FROM @TAB1

SELECT *
FROM @TAB2

だけだと動作します。

CREATE TYPE TMPTABLE AS TABLE (
CODE INT NOT NULL
,NAME varchar(50)
);

ができないみたいです。



[ 親 96668 / □ Tree ] 返信 編集キー/

▲[ 96681 ] / 返信無し
■96683 / 5階層)  Re[5]: Table変数の複製できますか?
□投稿者/ 魔界の仮面弁士 (2949回)-(2021/01/08(Fri) 16:54:45)
No96681 (天海 さん) に返信
> DECLARE @TAB1 TMPTABLE;
> DECLARE @TAB2 TMPTABLE;
> だけだと動作します。

TMPTABLE という名前のオブジェクトが、既に作成済みなのでは?
[ 親 96668 / □ Tree ] 返信 編集キー/

▲[ 96668 ] / ▼[ 96682 ]
■96675 / 1階層)  Re[1]: Table変数の複製できますか?
□投稿者/ shu (1240回)-(2021/01/08(Fri) 14:15:58)
No96668 (天海 さん) に返信

テーブル項目定義だけでよければ下のように出来ます。
コピーは一時テーブルを利用する方法です。


Declare  @tbl table (
	col1 nvarchar(5),
	col2 nvarchar(5)
);

Drop Table if exists #tbl2;    --作成前に削除

select * into #tbl2 from @tbl;

insert into @tbl values (1,2);
insert into @tbl values (3,4);

insert into #tbl2 values (3,4);
insert into #tbl2 values (5,6);

select a.col1, a.col2, b.col1 col3, b.col2 col4
from @tbl a cross join #tbl2 b;

[ 親 96668 / □ Tree ] 返信 編集キー/

▲[ 96675 ] / ▼[ 96684 ]
■96682 / 2階層)  Re[2]: Table変数の複製できますか?
□投稿者/ 天海 (4回)-(2021/01/08(Fri) 16:52:21)
テンポラリなので、
削除する方法を教えてください。


CREATE TYPE TMPTABLE AS TABLE (
CODE INT NOT NULL
,NAME varchar(50)
);

DECLARE @TAB1 TMPTABLE;
DECLARE @TAB2 TMPTABLE;

SELECT *
FROM @TAB1

SELECT *
FROM @TAB2

DELETE TMPTABLE  ← 最終的には削除したい

[ 親 96668 / □ Tree ] 返信 編集キー/

▲[ 96682 ] / ▼[ 96697 ]
■96684 / 3階層)  Re[3]: Table変数の複製できますか?
□投稿者/ 魔界の仮面弁士 (2950回)-(2021/01/08(Fri) 16:55:55)
No96682 (天海 さん) に返信
> テンポラリなので、
> 削除する方法を教えてください。

一時テーブルではダメなのでしょうか?
https://www.projectgroup.info/tips/SQLServer/SQL/SQL000021.html
[ 親 96668 / □ Tree ] 返信 編集キー/

▲[ 96684 ] / 返信無し
■96697 / 4階層)  Re[4]: Table変数の複製できますか?
□投稿者/ 天海 (5回)-(2021/01/11(Mon) 11:23:38)
No96684 (魔界の仮面弁士 さん) に返信

すみません。
CREATE TYPE が気になったので...

一時ファイルを使用します。
CREATE TYPE は使用しないようにします。


解決済み
[ 親 96668 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -