не может понять, почему такое требование есть. решение есть, но все еще не удовлетворено требованием или не может переварить такой сценарий.
вы можете прокручивать каждую запись по одному и, если нет ошибки, тогда вставьте. попробуйте это
Set Nocount On;
Declare @Id Int
,@Total Int
,@Loop Int
,@a Varchar(5)
,@b Numeric(3,1)
If Object_Id('tempdb.dbo.#x') Is Not Null
Begin
Drop Table #x;
End
If Object_Id('tempdb.dbo.#y') Is Not Null
Begin
Drop Table #y;
End
Create Table #x
(
Id Int Identity(1,1) Primary Key
,a Varchar(5)
,b Numeric(3,1)
)
Create Table #y
(
Id Int Identity(1,1) Primary Key
,a Varchar(10)
,b Numeric(5,2)
)
Insert Into #y(a,b)
Values
('abcdef',200)
,('abc',12)
,('abfdef',260)
,('34c',16)
,('abwe',18)
,('asdc',29)
,('3fgc',17)
,('a45we',88)
,('a3d7',49)
,('a367',48)
Select @Total = Count(*)
,@Id = 0
,@Loop = 0
From #y With (Nolock)
While (@Loop < @Total)
Begin
Select Top 1
@Id = y.Id
,@a = Substring(y.a,0,5)
,@b = Cast(y.b As Numeric(3,1))
From #y As y With (Nolock)
Where y.Id > @Id
Order By y.Id Asc
If @@Error <> 0 Goto NextLevel
Insert Into #x
Select @a
,@b
Goto NextLevel
NextLevel:
Select @Loop = @Loop + 1
End
Select *
From #x With (Nolock)