当我尝试以这种方式执行查询时,它将挂起SQL服务器(通话10到15分钟),但是如果我直接使用select查询来获取而没有光标,它将在几秒钟内显示。
我的光标语法是否有其他问题?
DeclARE @V_DATA XML;
SET @V_DATA=CONVERT(XML,'<DocumentElement>
<DATA>
<DEPARTMENT>Department</DEPARTMENT>
<DisplayName>Display Name</DisplayName>
<EMAIL_ID>Email Address</EMAIL_ID>
<FIRST_NAME>First Name</FIRST_NAME>enter code here
<LAST_NAME>Last Name</LAST_NAME>
<USER_ID>Mailbox Alias</USER_ID>
<PHONE_NO>Mobile Phone Number</PHONE_NO>
<actIVE>actIVE</actIVE>
<BLOCKED>BLOCKED</BLOCKED>
</DATA>
</DocumentElement>');
DeclARE @CURR_DATE DATETIME=NULL;
DeclARE @USER_ID VARCHAR=NULL;
DeclARE @FIRST_NAME VARCHAR=NULL;
DeclARE @LAST_NAME VARCHAR=NULL;
DeclARE @DEPARTMENT VARCHAR=NULL;
DeclARE @PHONE_NO VARCHAR=NULL;
DeclARE @EMAIL_ID VARCHAR=NULL;
DeclARE @actIVE VARCHAR=NULL;
DeclARE @BLOCKED VARCHAR=NULL;
DeclARE @V_CNT INT=0;
DeclARE @getGM CURSOR ;
SET @getGM = CURSOR FOR
SELECT
CURR_DATE = GETDATE(),USERID = Y.i.value('(USER_ID)[1]','VARCHAR(10)'),FIRST_NAME = Y.i.value('(FIRST_NAME)[1]','VARCHAR(50)'),LAST_NAME = Y.i.value('(LAST_NAME)[1]',DEPARTMENT = Y.i.value('(DEPARTMENT)[1]',PHONE_NO = Y.i.value('(PHONE_NO)[1]','VARCHAR(20)'),EMAIL_ID = Y.i.value('(EMAIL_ID)[1]','VARCHAR(100)'),actIVE = Y.i.value('(actIVE)[1]','VARCHAR(1)'),BLOCKED = Y.i.value('(BLOCKED)[1]','VARCHAR(1)')
FROM @V_DATA.nodes('DocumentElement/DATA') AS Y(i);
OPEN @getGM
FETCH NEXT FROM @getGM INTO @CURR_DATE,@USER_ID,@FIRST_NAME,@LAST_NAME,@DEPARTMENT,@PHONE_NO,@EMAIL_ID,@actIVE,@BLOCKED;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @V_CNT=(SELECT COUNT(*) FROM ADMS_USER_DetaIL
WHERE USERID=@USER_ID);
END;
CLOSE @getGM
DEALLOCATE @getGM