Точките на прекъсване не съвпадат с кодовия ред при отстраняване на грешки в SQL Server 2008 R2

Точките на прекъсване не съвпадат с кодовия ред при отстраняване на грешки в SQL Server 2008 R2. Понякога, когато достигнете точките на прекъсване, но не изпълнявате правилния кодов ред. Как да го поправя?

declare @SharedTable table(Num int,Name nvarchar(50))
Insert into @SharedTable(Num,Name) values('27149','Vader')

declare @numShared int=0;
select @numShared = COUNT(Num) from @SharedTable
declare @idx_Shared int =1

while @idx_Shared<=@numShared
begin
    declare @Num int;declare @Name nvarchar(50)
    select @Name=Name,@Num=Num from @SharedTable
    declare @AllSharers nvarchar(max)=''
    set @AllSharers+=('Num:'+Cast(@Num as nvarchar)+'    '+'Name:'+@Name+CHAR(10))
    set @idx_Shared+=1
end

print @AllSharers;

Много просто копие на код от моята заявка. Всеки път, когато указателят за отстраняване на грешки премине към ред select @Name=Name,@Num=Num from @SharedTable, той ще игнорира кода по-долу в цикъла „while“ и оттогава нататък целият код по-долу и точките на прекъсване започват да не съвпадат.

Копирайте го в нова заявка, проблемите все още са там, но въведете същото съдържание в нова заявка, проблемът изчезна.


person NFDream    schedule 26.07.2014    source източник
comment
Можете ли да бъдете по-конкретни или да дадете пример?   -  person dodexahedron    schedule 26.07.2014
comment
Кодовете са малко дълги, аз също не мога да намеря къде е проблемът, кодовете работят нормално. Може ли текстовият формат да причини проблема?   -  person NFDream    schedule 26.07.2014
comment
И понякога показалецът на точките на прекъсване може да скочи обратно към линията над точката на прекъсване, която в момента е ударена.   -  person NFDream    schedule 26.07.2014


Отговори (1)


SQL Server ще докладва реда от код, от който е започнал даден оператор, когато докладва грешка или достигне точка на прекъсване. Така че, ако имате нещо подобно:

SELECT *
FROM [tableName]
WHERE 1 = 'text'

Ако поставите точката на прекъсване на ред 3, SQL Server ще прекъсне на ред 1 (и ще съобщи, че грешката е възникнала на ред 1, когато продължите), тъй като операторът всъщност е започнал на ред 1 и интервалът е без значение в SQL.

person dodexahedron    schedule 26.07.2014
comment
Кодът няма никакви грешки, работи нормално, само точките на прекъсване не съвпадат с кодовия ред. - person NFDream; 26.07.2014
comment
Същото може да се каже и за точките на прекъсване. Ако поставите точка на прекъсване на ред 3 от това, което написах, тя ще прекъсне на ред 1. - person dodexahedron; 26.07.2014
comment
Няма нищо подобно в моя код, може би не казвам ясно. Когато точката на прекъсване достигне, следващата стъпка за изпълнение не е кодът, където стои точката на прекъсване, а друга. - person NFDream; 26.07.2014
comment
Тогава въпросът наистина не може да бъде отговорен без примерен код. Моля, дайте пример и аз или някой друг ще направим всичко възможно, за да ви помогнем, сигурен съм. - person dodexahedron; 26.07.2014
comment
Може би мога да мога по-кратък код за представяне на проблема, опитвам се - person NFDream; 26.07.2014