>데이터 베이스 >MySQL 튜토리얼 >내 SQL 쿼리에서 '변수 이름이 이미 선언되었습니다' 오류가 발생하는 이유는 무엇입니까?

내 SQL 쿼리에서 '변수 이름이 이미 선언되었습니다' 오류가 발생하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-03 08:42:39314검색

Why Does My SQL Query Throw a

SQL 쿼리의 변수 이름 충돌

오류 메시지 "변수 이름 '@'이(가) 이미 선언되었습니다. 변수 이름 쿼리 일괄 처리 또는 저장 프로시저 내에서 고유해야 합니다."는 SQL 내의 변수 이름 지정이 충돌함을 나타냅니다. code.

제공된 코드 조각에서 "btn_lock2_Click" 이벤트 핸들러 내의 루프에서 동일한 변수 이름 "@LockState"를 여러 번 사용하려고 하면 문제가 발생합니다. SQL에는 혼동과 모호함을 방지하기 위해 쿼리 또는 저장 프로시저 내에서 고유한 변수 이름이 필요합니다.

해결책 1: 각 루프 반복 후 매개변수 지우기

해결 방법 중 하나 충돌은 각 루프 반복 전에 매개변수 컬렉션을 지우는 것입니다. 이렇게 하면 동일한 매개변수 이름이 컬렉션에 여러 번 추가되지 않습니다.

for (long counter = from; counter <= to; counter )
{

rwd.command.Parameters.Clear(); // Clear the parameters collection before adding new parameters

string upd = "update card set LockState=@lockstate, card_descr=@card_descr where [cardNumber] = N'{0}'";
rwd.command.CommandText = upd;
rwd.command.Parameters.Add(new SqlParameter("@LockState", SqlDbType.NVarChar)).Value = 1;
rwd.command.Parameters.Add(new SqlParameter("@card_descr", SqlDbType.NVarChar)).Value = txt_desc2.Text;
...

}

해결책 2: 이전에 매개변수 정의 루프

또는 루프 전에 매개변수를 정의한 다음 각 반복 내에서 해당 값을 업데이트할 수 있습니다. 이 접근 방식은 루프가 시작되기 전에 매개변수가 컬렉션 내에 존재하도록 보장하여 지울 필요가 없도록 합니다.

rwd.command.Parameters.Add(new SqlParameter("@LockState", SqlDbType.NVarChar));
rwd.command.Parameters.Add(new SqlParameter("@card_descr", SqlDbType.NVarChar));

for (long counter = from; counter <= to; counter )
{

string upd = "update card set LockState=@lockstate, card_descr=@card_descr where [cardNumber] = N'{0}'";
rwd.command.CommandText = upd;

rwd.command.Parameters["@LockState"].Value = 1;
rwd.command.Parameters["@card_descr"].Value = txt_desc2.Text;

...

}

이러한 솔루션 중 하나를 사용하면 SQL 쿼리에 고유한 변수 이름이 있는지 확인하여 "이미 선언된" 오류를 방지할 수 있습니다. 오류가 발생했습니다.

위 내용은 내 SQL 쿼리에서 '변수 이름이 이미 선언되었습니다' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.