いい午後。SQLをSQL Serverに挿入
現在、私はSQl ServerでXMLを使用した小さなデモを行っています。
私は名前を持つテーブルを持っている:tb_xml_demo(ID, Name, Descr)
そして、私はこのテーブルに挿入するたび。
001, 002, 003 ....
これは
alter proc sp_xml_demo_cud
@p_xml xml
as
begin
declare @dochandle int;
exec sp_xml_preparedocument @dochandle output,@p_xml;
insert into tb_xml_demo(id, name, descr)
select
(select
format(isnull(convert(int, max(id)), 0) + 1, '000')
from tb_xml_demo) id,
name,
descr
from
OPENXML(@dochandle,'/root/item',2)
with
(name nvarchar(50),
descr nvarchar(50),
crud varchar(1)
)
end;
私の手順であり、これは私のxmlです:
exec sp_xml_demo_cud
'<root>
<item>
<name>9876543</name>
<descr>1sdfsd</descr>
</item>
<item>
<name>333</name>
<descr>333</descr>
</item>
</root>';
そして、これは、プロシージャを実行した後の結果である:
id Name Descr
001 9876543 1sdfsd
001 333 333
このようなID列
私を助けてください。
ありがとうございます。
は何のお手伝いをしますか?ここに質問はありません! – HoneyBadger
質問は全く明確ではありませんが、彼の問題は両方のIDが "001"から出てくることです。これはconvert(int、max(id))+ 1ビットのためです...もちろん、バッチ内のすべての行に同じIDを割り当てます。行を個別に挿入しても、それは本当に恐ろしい方法です。アイデンティティintを使用して、サーバーにIDを生成させてください! – beercohol
サイドノート:ストアドプロシージャのプレフィックス 'sp_'を**使用しないでください**。マイクロソフトは、[*ストアドプロシージャの名前付け*を参照してください](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx)、およびあなたはいつか名前衝突のリスクを将来実行します。 [ストアドプロシージャのパフォーマンスにも悪い](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)単に 'sp_'を避け、他の何かを接頭辞として使うのが最善です。異なる場合 –