一時テーブル #foo を作成する権限を SQL ロールに付与し、そのテーブルを操作する権限 (SELECT、INSERT、および DELETE) を付与したいと考えています。テーブル #foo が作成されていない場合 (このロールに属するユーザーが作成および管理します) はどうすれば可能ですか?
ありがとう
注: 可能であれば、ソリューションは SQL 2008 と SQL Azure の両方で動作するはずです。
一時テーブル #foo を作成する権限を SQL ロールに付与し、そのテーブルを操作する権限 (SELECT、INSERT、および DELETE) を付与したいと考えています。テーブル #foo が作成されていない場合 (このロールに属するユーザーが作成および管理します) はどうすれば可能ですか?
ありがとう
注: 可能であれば、ソリューションは SQL 2008 と SQL Azure の両方で動作するはずです。
できません:
グローバル一時テーブルは、テーブルを作成したセッションが終了し、他のすべてのタスクがそれらの参照を停止すると、自動的に削除されます。タスクとテーブルの間の関連付けは、単一のTransact-SQLステートメントの存続期間中のみ維持されます。これは、作成セッションが終了したときにテーブルをアクティブに参照していた最後のTransact-SQLステートメントの完了時に、グローバル一時テーブルが削除されることを意味します。 リンクテキスト
Azureについてはよくわかりませんが...
tempdb にテーブルを明示的に作成すると、テーブルはセッション間で保持されますが、サーバーの再起動時に消去されます。
create table tempdb..authors (au_id char(11))
##TempTable を作成すると、グローバルに表示されますが、作成者のセッションで終了します。
どうやら、で作成されたユーザーAUTHORIZATION dbo
は、データベースに接続すると、一時テーブルを作成および管理する権限を既に持っているようです。このユーザーがデータベース内の他のテーブルにアクセスする必要がある場合にのみ、明示的な権限を付与する必要があります。