Привет У меня есть процедура в MS SQL Server 2012, в которой я выполняю некоторые вставки и обновление, но в какой-то части этой процедуры я использую курсор для циклического ввода.Вставка без использования курсора
Может кто-нибудь, пожалуйста, помогите мне сделать эту петлевую вставку без использования курсора?
Полный код ниже
(
@TerritoryName varchar(200),
@TerritoryDescription varchar(2000),
@TerritoryID int,
@CountyIDs varchar(500),
@ZipCodeIDs varchar(500)
)
AS
BEGIN
Declare @countyid int,@zipcodeid int,@Target_GeographyTypeID int;
DECLARE @t TABLE(idx int primary key identity,id int)
DECLARE @tzip TABLE(idx int primary key identity,id int)
INSERT INTO @t
SELECT item from fn_split(@CountyIDs,',')
INSERT INTO @tzip
SELECT item from fn_split(@ZipCodeIDs,',')
IF(@TerritoryID < 1)
BEGIN
INSERT INTO Territories(TerritoryName,TerritoryDescription,Active,CreatedDate)
VALUES(@TerritoryName,@TerritoryDescription,1,Getdate())
SET @TerritoryID= @@identity
END
ELSE
BEGIN
UPDATE Territories
SET [email protected],
[email protected]
WHERE [email protected]
END
SELECT @Target_GeographyTypeID=GeographyTypeId from GeoGraphyTypes
WHERE GeographyTypeName='County'
DELETE from Territory_mapping
WHERE [email protected]
DECLARE db_cursor CURSOR FOR
SELECT id
FROM @t
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @countyid
WHILE @@FETCH_STATUS = 0
BEGIN
if(@countyid > 0)
BEGIN
INSERT INTO Territory_mapping(TerritoryID,Target_GeographyTypeID,Target_GeographyID,CreatedDate)
VALUES(@TerritoryID,@Target_GeographyTypeID,@countyid,GETDATE())
END
FETCH NEXT FROM db_cursor INTO @countyid
END
CLOSE db_cursor
DEALLOCATE db_cursor
-------------------- Zip Code -----------------------
SELECT @Target_GeographyTypeID=GeographyTypeId from GeoGraphyTypes
WHERE GeographyTypeName='Zipcode'
DECLARE db_cursor CURSOR FOR
SELECT id
FROM @tzip
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @zipcodeid
WHILE @@FETCH_STATUS = 0
BEGIN
IF(@zipcodeid > 0)
BEGIN
INSERT INTO Territory_mapping(TerritoryID,Target_GeographyTypeID,Target_GeographyID,CreatedDate)
VALUES(@TerritoryID,@Target_GeographyTypeID,@zipcodeid,GETDATE())
END
FETCH NEXT FROM db_cursor INTO @zipcodeid
END
CLOSE db_cursor
DEALLOCATE db_cursor
RETURN @TerritoryID
END
@CountyID содержит разделенные запятой идентификаторы округа –
Откуда берутся '@ TerritoryID',' @ Target_GeographyTypeID'? из таблицы '@ t'? –
Нет @T и @Territory не являются independent.code из обоих ниже: –