XML查询错误,请帮帮我,谢谢 [英] XML query error please help me thank u
本文介绍了XML查询错误,请帮帮我,谢谢的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
ALTER PROCEDURE [dbo].[BULKINSERTSUDENTDETAIL]
(
@XMLDATA XML,
@LOGINTABLE VARCHAR(25),
@OUT VARCHAR(1000) OUTPUT
)
AS
BEGIN
SET @OUT = ' ';
DECLARE @XRECCOUNT INT;
DECLARE @COUNT INT;
CREATE TABLE XMLDATA_TABLE
(
ROLL_NO INT,
STUDENTNAME VARCHAR(25),
SYSTEM_NO INT,
PASSWORD VARCHAR(20),
EMAIL_ID VARCHAR(40),
BATCH VARCHAR(5)
);
DECLARE @SQL NVARCHAR(4000);
DECLARE @XROLL_NO INT;
DECLARE @XSTUDENTNAME VARCHAR(25);
DECLARE @XSYSTEM_NO INT;
DECLARE @XPASSWORD VARCHAR(20);
DECLARE @XEMAIL_ID VARCHAR(40);
DECLARE @XBATCH VARCHAR(5);
INSERT INTO XMLDATA_TABLE(ROLL_NO, STUDENTNAME, SYSTEM_NO, PASSWORD,EMAIL_ID, BATCH)
SELECT ParamValues.ID.query('ROLL_NO').value('.','INT') ROLL_NO,
ParamValues.ID.query('STUDENTNAME').value('.','NVARCHAR(25)') STUDENTNAME,
ParamValues.ID.query('SYSTEM_NO').value('.','INT') SYSTEM_NO,
ParamValues.ID.query('PASSWORD').value('.','NVARCHAR(20)') PASSWORD,
ParamValues.ID.query('EMAIL_ID').value('.','NVARCHAR(40)') EMAIL_ID,
ParamValues.ID.query('BATCH').value('.','NVARCHAR(5)') BATCH
FROM @XMLDATA.nodes('/DATA/ID') AS ParamValues(ID);
SET @COUNT = (SELECT COUNT (*) FROM XMLDATA_TABLE);
IF @COUNT = 0
BEGIN
SET @OUT ='AN ERROR OCCURED';
DROP TABLE XMLDATA_TABLE
RETURN;
END;
ELSE
BEGIN
BEGIN TRANSACTION
SET @SQL =('DELETE FROM '+ @LOGINTABLE + '
INSERT INTO '+ @LOGINTABLE +'(ROLL_NO,STUDENTNAME,SYSTEM_NO,PASSWORD,EMAIL_ID,BATCH)
SELECT ROLL_NO,STUDENTNAME,SYSTEM_NO,PASSWORD,EMAIL_ID,BATCH FROM XMLDATA_TABLE');
EXEC SP_EXECUTESQL @SQL,N'@LOGINTABLE VARCHAR(30)',@LOGINTABLE;
DROP TABLE XMLDATA_TABLE;
SET @OUT = 'SUCCESS';
COMMIT;
END;
END;
通过这种方式,我成功插入了一行,但是插入了多行却引发错误....
添加了代码块[/编辑]
by this i insert one row successfully but more than one row insertion raise error....
Code block added[/Edit]
推荐答案
更改存储过程,如下所示
xml格式,如
Change your stored procedure like below
xml formate like
<college>
<student_details>
<roll_no>10000</roll_no>
<studentname>XYZ</studentname>
<system_no>11</system_no>
<password>123</password>
<email_id>123@GMAIL.COM
<batch>123</batch>
</email_id></student_details>
<student_details>
<roll_no>10001</roll_no>
<studentname>XYZ1</studentname>
<system_no>12</system_no>
<password>1231</password>
<email_id>1231@GMAIL.COM
<batch>1231</batch>
</email_id></student_details>
</college>
ALTER PROCEDURE [dbo].[BULKINSERTSUDENTDETAIL]
(
@XMLSTRING VARCHAR(MAX),
@LOGINTABLE VARCHAR(25),
@OUT VARCHAR(1000) OUTPUT
)
AS
BEGIN
SET @OUT = ' ';
DECLARE @XRECCOUNT INT;
DECLARE @COUNT INT;
CREATE TABLE XMLDATA_TABLE
(
ROLL_NO INT,
STUDENTNAME VARCHAR(25),
SYSTEM_NO INT,
PASSWORD VARCHAR(20),
EMAIL_ID VARCHAR(40),
BATCH VARCHAR(5)
);
DECLARE @SQL NVARCHAR(4000);
DECLARE @XROLL_NO INT;
DECLARE @XSTUDENTNAME VARCHAR(25);
DECLARE @XSYSTEM_NO INT;
DECLARE @XPASSWORD VARCHAR(20);
DECLARE @XEMAIL_ID VARCHAR(40);
DECLARE @XBATCH VARCHAR(5);
DECLARE @XMLDATA XML;
SELECT @XMLDATA =@XMLSTRING
INSERT INTO XMLDATA_TABLE(ROLL_NO, STUDENTNAME, SYSTEM_NO,PASSWORD,EMAIL_ID, BATCH)
SELECT convert(INT,STUDENT_DETAIL.ITEM.query('./ROLL_NO').value('.','INT')),
convert(VARCHAR(25),STUDENT_DETAIL.ITEM.query('./STUDENTNAME').value('.','VARCHAR(25)')),
convert(INT,STUDENT_DETAIL.ITEM.query('./SYSTEM_NO').value('.','INT')),
convert(VARCHAR(20),STUDENT_DETAIL.ITEM.query('./PASSWORD').value('.','VARCHAR(20)')),
convert(VARCHAR(40),STUDENT_DETAIL.ITEM.query('./EMAIL_ID').value('.','VARCHAR(40)')),
convert(VARCHAR(5),STUDENT_DETAIL.ITEM.query('./BATCH').value('.','VARCHAR(5)'))
FROM @XML.nodes('/COLLEGE/STUDENT_DETAILS') AS STUDENT_DETAIL(ITEM)
SET @COUNT = (SELECT COUNT (*) FROM XMLDATA_TABLE);
IF @COUNT = 0
BEGIN
SET @OUT ='AN ERROR OCCURED';
DROP TABLE XMLDATA_TABLE
RETURN;
END;
ELSE
BEGIN
BEGIN TRANSACTION
SET @SQL =('DELETE FROM '+ @LOGINTABLE + '
INSERT INTO '+ @LOGINTABLE +'(ROLL_NO,STUDENTNAME,SYSTEM_NO,PASSWORD,EMAIL_ID,BATCH)
SELECT ROLL_NO,STUDENTNAME,SYSTEM_NO,PASSWORD,EMAIL_ID,BATCH FROM XMLDATA_TABLE');
EXEC SP_EXECUTESQL @SQL,N'@LOGINTABLE VARCHAR(30)',@LOGINTABLE;
DROP TABLE XMLDATA_TABLE;
SET @OUT = 'SUCCESS';
COMMIT;
END;
END;
ALTER PROCEDURE [dbo].[BULKINSERTSUDENTDETAIL]
(
@XMLDATA XML,
@LOGINTABLE VARCHAR(25)='LOGINTABLE',
@OUT VARCHAR(1000) OUTPUT
)
AS
BEGIN
SET @OUT = ' ';
DECLARE @XRECCOUNT INT;
DECLARE @COUNT INT;
CREATE TABLE XMLDATA_TABLE
(
ROLL_NO INT,
STUDENTNAME VARCHAR(25),
SYSTEM_NO INT,
PASSWORD VARCHAR(20),
EMAIL_ID VARCHAR(40),
BATCH VARCHAR(5)
);
DECLARE @SQL NVARCHAR(4000);
DECLARE @XROLL_NO INT;
DECLARE @XSTUDENTNAME VARCHAR(25);
DECLARE @XSYSTEM_NO INT;
DECLARE @XPASSWORD VARCHAR(20);
DECLARE @XEMAIL_ID VARCHAR(40);
DECLARE @XBATCH VARCHAR(5);
print 'hi;'
INSERT INTO XMLDATA_TABLE(ROLL_NO, STUDENTNAME, SYSTEM_NO, PASSWORD,EMAIL_ID, BATCH)
SELECT ParamValues.ID.query('ROLL_NO').value('.','INT') ROLL_NO,
ParamValues.ID.query('STUDENTNAME').value('.','NVARCHAR(25)') STUDENTNAME,
ParamValues.ID.query('SYSTEM_NO').value('.','INT') SYSTEM_NO,
ParamValues.ID.query('PASSWORD').value('.','NVARCHAR(20)') PASSWORD,
ParamValues.ID.query('EMAIL_ID').value('.','NVARCHAR(40)') EMAIL_ID,
ParamValues.ID.query('BATCH').value('.','NVARCHAR(5)') BATCH
FROM @XMLDATA.nodes('/DATA/ID') AS ParamValues(ID);
select * from XMLDATA_TABLE
SET @COUNT = (SELECT COUNT (*) FROM XMLDATA_TABLE);
IF @COUNT = 0
BEGIN
SET @OUT ='AN ERROR OCCURED';
DROP TABLE XMLDATA_TABLE
RETURN;
END;
ELSE
BEGIN
BEGIN TRANSACTION
SET @SQL =('DELETE FROM '+ @LOGINTABLE + '
INSERT INTO '+ @LOGINTABLE +'(ROLL_NO,STUDENTNAME,SYSTEM_NO,PASSWORD,EMAIL_ID,BATCH)
SELECT ROLL_NO,STUDENTNAME,SYSTEM_NO,PASSWORD,EMAIL_ID,BATCH FROM XMLDATA_TABLE');
EXEC SP_EXECUTESQL @SQL,N'@LOGINTABLE VARCHAR(30)',@LOGINTABLE;
DROP TABLE XMLDATA_TABLE;
SET @OUT = 'SUCCESS';
COMMIT;
END;
END;
EXEC BULKINSERTSUDENTDETAIL '<DATA><ID>
<ROLL_NO>1</ROLL_NO>
<STUDENTNAME>BHAVESH</STUDENTNAME>
<SYSTEM_NO>1</SYSTEM_NO>
<PASSWORD>BK</PASSWORD>
<EMAIL_ID>BKEMAIL</EMAIL_ID>
<BATCH>2</BATCH></ID>
<ID>
<ROLL_NO>2</ROLL_NO>
<STUDENTNAME>BHAVESH</STUDENTNAME>
<SYSTEM_NO>1</SYSTEM_NO>
<PASSWORD>BK</PASSWORD>
<EMAIL_ID>BKEMAIL</EMAIL_ID>
<BATCH>2</BATCH></ID>
</DATA>','LOGINTABLE','1'
这篇关于XML查询错误,请帮帮我,谢谢的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文