web-dev-qa-db-ja.com

LocalDBは一時テーブルをサポートしていますか?

SQL Serverの一時テーブル(接頭辞#)LocalDBインスタンスでサポートされていますか?

7
user3424480

すべてのバージョンについて回答することはできませんが、SQL Server 2012からSQL Server 2017まではサポートされていると確信しています

LocalDBには、SQL Server Expressと同じプログラミング機能があります。

SQL Server Express LocalDBは、Expressの軽量バージョンであり、すべてのプログラマビリティ機能を備えていますが、ユーザーモードで実行され、構成のインストールが高速で、前提条件のリストが短いです。

ソース

次に、前のポイントを基に、SQL Server Express 2012 T-SQL構文

Expressは、SQL Serverのどのエディションにもある同じT-SQL言語要素をサポートしています。データベースに対してデータ操作言語クエリを発行できるだけでなく、データ定義言語ステートメントを実行して、ビュー、トリガー、カーソル、ストアドプロシージャなどのオブジェクトを作成することもできます。

ソース

テスト(SQL Server 2017)

enter image description here

USE testdb
GO
CREATE TABLE #temp (id int , value nvarchar(255));

INSERT INTO #temp( id ,value)
SELECT 5, 'bla';

SELECT * FROM #temp;

結果

id  value
5   bla

一時テーブルは、dbの互換モードを100(2008)に変更した場合にも機能します。

10
Randi Vertongen

はい。すべてのバージョンの一時オブジェクト(ローカル一時テーブル、グローバル一時テーブル、テーブル変数、ローカル一時ストアドプロシージャ、グローバル一時ストアドプロシージャ)は、SQL Server Express LocalDBのすべてのバージョンで使用できます。

バージョン2012、2014、2016、2017で5つのオブジェクトタイプのそれぞれについて次の簡単なテストを実行しましたが、エラーは発生しませんでした。

CREATE TABLE #LocalTempTable (Col1 INT);
SELECT * FROM #LocalTempTable;


CREATE TABLE ##GlobalTempTable (Col1 INT);
SELECT * FROM ##GlobalTempTable;


DECLARE @TableVariable TABLE (Col1 INT);
SELECT * FROM @TableVariable;


GO
CREATE PROCEDURE #LocalTempProc
AS
SELECT 1;
GO
EXEC #LocalTempProc;

GO
CREATE PROCEDURE ##GlobalTempProc
AS
SELECT 2;
GO
EXEC ##GlobalTempProc;

また、SQL Serverは、システムストアドプロシージャ、msdbにある機能などで使用されているため、利用できない場合でも起動しない可能性があります。

6
Solomon Rutzky

はい、Localdbは一時テーブルをサポートしています。

USE [test];
GO

CREATE TABLE #mytemp
(
    id int,
    foo int,
    bar int
);
GO

SELECT 
    *
FROM   
    tempdb.INFORMATION_SCHEMA.TABLES;
GO

DROP TABLE #mytemp;
GO

戻り値:

TABLE_CATALOG    TABLE_SCHEMA     TABLE_NAME                            TABLE_TYPE
---------------- ---------------- ------------------------------------  ----------
tempdb           dbo              #mytemp________________00000000000A   BASE TABLE

そしてsys.databasesをクエリします:

SELECT 
    name,
    database_id
FROM
    sys.databases;

同じシステムデータベース構造を返します。

name      database_id
--------- -----------
master    1
tempdb    2
model     3
msdb      4
test      5
4
McNets

@RandiVertongenに同意します。

LocalDBのインストールでは、SQL Serverデータベースエンジンの起動に必要な最小限のファイルセットがコピーされます。 LocalDBがインストールされると、特別な接続文字列を使用して接続を開始できます。接続すると、必要なSQL Serverインフラストラクチャが自動的に作成および開始され、アプリケーションが複雑な構成タスクなしでデータベースを使用できるようになります。開発者ツールを使用すると、SQL Serverの完全なサーバーインスタンスを管理しなくてもTransact-SQLコードを記述してテストできるSQL Serverデータベースエンジンを開発者に提供できます。

LocalDBの詳細については、公式リンク source を参照してください

制限があります:

1)LocalDBをマージレプリケーションサブスクライバーにすることはできません。

2)LocalDBはFILESTREAMをサポートしていません。

3)LocalDBでは、Service Brokerのローカルキューのみが許可されます。

4)NT AUTHORITY\SYSTEMなどのビルトインアカウントが所有するLocalDBのインスタンスは、Windowsファイルシステムのリダイレクトが原因で、管理性の問題が発生する可能性があります。代わりに、所有者として通常のWindowsアカウントを使用してください。

これが役に立てば幸いです!

2
MarmiK