2016-10-31 3 views
0

私はidusernameの2つの値を持つテーブルに挿入するストアドプロシージャを持っています。挿入時にAutoIncremeting IDを返します

CREATE PROCEDURE [dbo].[sp_test] 
    @username varchar(50) 
AS 
BEGIN 
    INSERT INTO dbo.testtable(username) 
     SELECT 
      @username 
     FROM 
      tbl.test2 
     WHERE 
      username IS NOT NULL 

は、どのように私は、それが明示的に記述されていなくてもそこにidを返すことができますようidフィールドはautoincremetingされるので、私のストアドプロシージャが見えますか?私はSCOPE_IDENTITY();キーワードを試みましたが、空白とヌルを受け取りました。

+2

あなたのinsert文は非常に奇妙に見えます。なぜあなたは入力変数を選択しているだけでなく、テーブルtest2も含んでいますか?パラメータだけを挿入したい場合は、FROMを挿入する必要はありません。また、sp_接頭辞を使用しない(または全く接頭辞を付けない方が良い)ことも考慮する必要があります。 sp_接頭辞はパフォーマンスやその他のさまざまな問題を引き起こす可能性があります。 http://sqlperformance.com/2012/10/t-sql-queries/sp_prefix –

答えて

3

あなたが望むものを推測すると、私はそれがこのようなものになると思います。

CREATE PROCEDURE [dbo].[Insert_test] 
(
    @username varchar(50) 
) AS 

BEGIN 
    INSERT INTO dbo.testtable 
    (
     username 
    ) 
    VALUES 
    (
     @username 
    ) 

    select SCOPE_IDENTITY() 
END 
3

あなたが本当にテーブルから複数の行を挿入している場合は、IDSをこのように得ることができます。

INSERT INTO dbo.testtable(username) 
output inserted.id 
SELECT username 
FROM dbo.test2 
where username is not null 
関連する問題