2016-05-26 7 views
0
CREATE SEQUENCE id AS INTEGER START WITH 1 INCREMENT BY 1; 

WITH source (Id, SomeColumn) AS 
(
      SELECT NEXT VALUE FOR id, 'some value 1' 
      UNION 
      SELECT NEXT VALUE FOR id, 'some value 2' 
) 
SELECT * FROM source; 

DROP SEQUENCE id; 

を選択それは、次のエラーがスローされます。SQL Serverが

NEXT VALUE FOR function is not allowed in check constraints, default objects, computed columns, views, user-defined functions, user-defined aggregates, user-defined table types, sub-queries, common table expressions, derived tables or return statements.

なぜNEXT VALUE FOR機能がunionsでは動作しませんか? 良い選択肢は何ですか?

私は同様のCTEを使用して、マージステートメントを使用してデフォルト値を持つテーブルをシードします。手動で数値を入力するのを避けようとしています。

私はここに同様の問題にアレックスのコメントやリンクに基づいてUNION SELECTのID ++

+0

これはどのように「機能しませんか?詳細をお知らせください。 –

+2

ROW_NUMBER()ウィンドウ関数を考慮しましたか?このようなものをお探しですか?http://stackoverflow.com/questions/37287657/sql-server-2012-create-a-new-table-with-instant-1000-record-that-c​​ontains-thre/37288556# 37288556? – Alex

+1

この古典的なソリューションはあなたに適していますか? '何らかの値2' を選択 someValueの UNION AS表#H(IDのINTのIDENTITY(1,1)、someValueのVARCHAR(255))#H(someValueの)INTO INSERT SELECT '何らかの値1' を作成 SELECT * FROM#h H –

答えて

0

ようなものが必要でソリューションです。今後の参考のために

WITH source (SomeColumn) AS 
(
      SELECT 'some value 1' 
    UNION SELECT 'some value 2' 
) 
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), SomeColumn FROM source; 

ROW_NUMBER() OVER (ORDER BY (SELECT NULL))はせずに行番号を取得する方法ですセットを注文する