0

companycontactnoの1つのcompanyIDに対応するテーブルに2つの連絡先番号を格納しました。テーブル。これは、ストアドプロシージャでCSVから値を抽出することを使用して行いました。

会社IDに対応する連絡先番号を編集したい場合はどうすればよいですか?

これは、連絡先番号の編集に使用するストアドプロシージャです..更新に問題があります..助けてください

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================

CREATE PROCEDURE dbo.EditCompanyDetails
(
@OldCompanyName varchar(max),
@NewCompanyName varchar(max),
@newAddress varchar(max),
@newMailID varchar(max),
@Temp varchar(8000)
)

AS
BEGIN
SET NOCOUNT ON;

declare @compID int

DECLARE @c int, @a varchar(max), @id int, @variable varchar(8000), @max int

DECLARE @Temp_Table table (serial_no int Identity(1,1), value varchar(max))

--PROCEDURE--

--Editing Company Table--
set @compID=(Select Company.CompanyID from Company where Company.CompanyName=@OldCompanyName)

update Company
set CompanyName=@NewCompanyName, [Address]=@newAddress, Email=@newMailID
where Company.CompanyID=@compID

--For CONTACT NUMBERS

    --Using Table to store CSV seperately in each row--
select @c = CHARINDEX(',', @Temp)

while @c > 0
BEGIN
    insert into @Temp_Table
    select LEFT(@Temp, @c - 1)

    select @Temp = right(@Temp, LEN(@Temp) - @c)
    select @c = CHARINDEX(',', @Temp)
END

--Update Table CompanyContactNo
  --CompanyContactNo have following Columns:
   --CNoID (PK)
   --CompanyID (references PK in Company table
   --ContactNumber

set @max= (select MAX(serial_no) from @Temp_Table)


while @max > 0
BEGIN
set @variable = (select value from @Temp_Table where serial_no=@max)

update CompanyContactNo
set ContactNumber=@variable
where CompanyID=@compID
set @max = @max-1
END

End

GO
4

1 に答える 1

1

行が2つだけで、CompanyContactNoテーブルに連絡先の行が2つあることがわかっている場合、それぞれが異なる行に影響を与える2つのUpdateステートメントを実行できます。

UPDATE CompanyContactNo
Set ContactNumber=
    (SELECT value FROM @Temp_Table WHERE serial_no = (SELECT MAX(serial_no) FROM @Temp_Table))
WHERE 
    CompanyID=@compID
    AND (CNoId = select MAX(CNoId) FROM CompanyContactNo WHERE CompanyID = @compID)

次に、2番目の連絡先番号の場合:

UPDATE CompanyContactNo
SET ContactNumber=
        (SELECT value FROM @Temp_Table WHERE serial_no = (SELECT MIN(serial_no) FROM @Temp_Table))
WHERE 
    CompanyID=@compID
    AND (CNoId = select MIN(CNoId) FROM CompanyContactNo WHERE CompanyID = @compID)
于 2012-10-29T00:06:21.403 に答える