2012-01-12 5 views
2

テーブルにいくつかのデータを挿入しようとしています: "文字列"と "Order列+1の最大数"という2つのものが含まれています。サブクエリーといくつかの操作でINSERT INTO

これが私のクエリです:

INSERT INTO MyTable ([Text],[Order]) 
SELECT 'MyText' , (Max([Order]) + 1) 
FROM MyTable 

私のクエリで間違って起こっていますか?

私はMicrosoft SQL Server 2005 SP3を使用しています。

+0

あなたはどのようなRDBMSを使用していますか? –

+0

@ subt13 Microsoft SQL Server 2005 SP3 –

+0

どのようなエラーが表示されますか? –

答えて

3

あなたはこのように、このクエリをテストすることができます。

私はエラーが表示されません:

create table #MyTable 
(
    [Text] varchar(40), 
    [Order] int NOT NULL 
) 
INSERT INTO #MyTable([Text],[Order]) 
SELECT 'MyText' [Text], isnull(max([order]) + 1, 0) [Order] 
FROM #MyTable 

drop table #MyTable 

オリジナル:

INSERT INTO MyTable ([Text],[Order]) 
SELECT 'MyText' [Text], max([Order]) + 1 [Order] 
FROM MyTable 

または

INSERT INTO MyTable ([Text],[Order]) 
SELECT top 1 'MyText' [Text], max([Order]) + 1 [Order] 
FROM MyTable 

制限はありませんSQL Serveで有効r私が知る限り

+0

@ mahdi - そのエラーに関連するより多くのコードを投稿できますか? –

+0

どういう意味ですか? –

+0

あなたの質問では、MyTableというテーブルと、このエラーが(潜在的に)発生しない定義を投稿しました。 –

3

彼は[並べ替え

という名前の列を持っていない限り、彼はその挿入中に割り当てる/すべての値を追加するには、列がNULL値を許可しない場合は特に は完全にdbo.MyTableで挿入を修飾するように聞こえる。持っていますフィールドはもっと理にかなっているかもしれません。 なぜSQLキーワードでフィールドに名前を付けていますか... ???

INSERT INTO MyTable ([Text],[Order) Values('MyTextTest',1) 

これはOrder列があなたのコラムのMax([Order]) + 1一部がNULLを返すことを、nullにすることができされていないことを意味し

+0

私の悪いコメントを残して申し訳ありません。私はそれを削除しました。エラーは "列 'Order'、テーブル 'master.dbo.MyTable'にNULL値を挿入できません;列はNULLを許可しません。INSERTが失敗し、ステートメントが終了しました。 –

+0

テーブルが現在空です(行がありません)ので、Max()関数が何も返さないため、このエラーが発生していると思います –

3

Cannot insert the value NULL into column 'Order', table 'master.dbo.MyTable'; column does not allow nulls. INSERT fails. The statement has been terminated.

...最初の挿入テストをしてみてください。
これは、あなた自身が既に気づいたように、テーブルが空であるためです。

あなたはISNULL()を使用して、クエリ内の実数でNULLを置き換えることによって、この問題を回避することができます

INSERT INTO MyTable ([Text],[Order]) 
SELECT 'MyText' , (isnull(Max([Order]),0) + 1) 
FROM MyTable 
+0

私は言うべきものが嫌いですが、彼は自分のテーブルに何も挿入していません私は彼がMyTestに挿入され、選択テーブルがdbo.YourTest ..のようなものであったかどうかを理解することができます初期のクエリは彼が何をしようとしているものを追加しません.. – MethodMan

+0

ありがとう。できます! –