web-dev-qa-db-ja.com

SQL Server 2012を使用して一時テーブルに複数の行を挿入する

これらのStackOverflowの質問 herehere 、および here はすべて同じことを言っていますが、SSMSまたはSQLFiddleで実行することはできません

CREATE TABLE #Names
  ( 
    Name1 VARCHAR(100),
    Name2 VARCHAR(100)
  ) 

INSERT INTO #Names
  (Name1, Name2)
VALUES
  ('Matt', 'Matthew'),
  ('Matt', 'Marshal'),
  ('Matt', 'Mattison')

これをSSMSとして実行すると、挿入が失敗し、VALUESの後の最初の行に次のメッセージが表示されます

メッセージ102、レベル15、状態1、行10
「、」付近の構文が正しくありません。

この Fiddle#記号なしで実行され、テーブル名が#Namesのときにスキーマは正常に実行されますが、次のようになりますテーブルから*を選択しようとするとメッセージが表示される

無効なオブジェクト名 '#NAMES':SELECT * FROM #NAMES

SQL Server 2012は複数の挿入をサポートしていますか?


Update:どうやらSSMS 2012上の2005サーバーにアクセスしています...

SELECT @@VERSION --Returns: Microsoft SQL Server 2005
12
KyleMit

はい、SQL Server 2012は複数の挿入をサポートします-この機能はSQL Serverで導入されました2008

Management Studio 2012があるのではないかと思いますが、実際にはSQL Serverに接続しています2005インスタンス...

どのバージョンのSQL Server engineから取得しますかSELECT @@VERSION ??

9
marc_s

SQLFiddleを使用する場合、セパレーターがGOに設定されていることを確認してください。また、スキーマ構築スクリプトは実行スクリプトとは異なる接続で実行されるため、一方で作成された一時テーブルは他方では表示されません。このフィドルは、コードが有効であり、SQL 2012で機能していることを示しています。

SQL Fiddle

MS SQL Server 2012スキーマセットアップ

クエリ1

CREATE TABLE #Names
  ( 
    Name1 VARCHAR(100),
    Name2 VARCHAR(100)
  ) 

INSERT INTO #Names
  (Name1, Name2)
VALUES
  ('Matt', 'Matthew'),
  ('Matt', 'Marshal'),
  ('Matt', 'Mattison')

SELECT * FROM #NAMES

結果

| NAME1 |    NAME2 |
--------------------
|  Matt |  Matthew |
|  Matt |  Marshal |
|  Matt | Mattison |

SSMS 2012のスクリーンショットは次のとおりです。 enter image description here

9
Sebastian Meine