매개 변수 선언에서 varchar (MAX)에 어떤 크기를 사용합니까?


190

ADO.NET에서 매개 변수를 만들 때 일반적으로 열 크기를 설정합니다.

그러나 열이 어떤 크기 VARCHAR(MAX)입니까?

cmd.Parameters.Add("@blah", SqlDbType.VarChar, ?????).Value = blah;

답변:


288

이 경우 -1을 사용합니다.


5
모든 매개 변수 길이를 -1로 설정하면 성능 저하가 발생하므로 db-matching 목록을 유지할 필요가 없습니까?
Andrew Bullock

1
Varchar (max)는 8000 바이트 미만의 값에 대해 varchar (8000)과 동일하게 처리됩니다. 더 큰 값의 경우 필드는 "텍스트"필드 ( "CLOB")로 처리됩니다. 데이터가 추가 조회가 필요한 "out-of-row"에 저장되므로 쿼리 계획 최적화 및이 열에서 더 큰 값을 가진 행을 검색하는 효율성에 영향을 줄 수 있습니다.
KeithS

SQL에서 사용 NVARCHAR (최대) 및 C #에서 길이 -1 SqlDbType.NVarchar와 정의
Romil 쿠마 자이나교

Sam Meshesha의 답변이 아래에 없다면-귀하의 답변을 놓쳤을 것입니다. 코드 형식의 샘플 코드를 넣으면 답변에 더 많은 투표권이 부여 될 수 있습니다.
qxotk

51

완전한 코드 라인 인 Michal Chaniewski가 -1을 보지 못한 사람들을 위해 :

cmd.Parameters.Add("@blah",SqlDbType.VarChar,-1).Value = "some large text";

2

최대 SqlDbType.VarChar 크기는 2147483647입니다.

당신이 일반적인 사용한다면 OLEDB 연결 대신 SQL의를 내가 발견 여기 LONGVARCHAR 데이터 타입도 있습니다. 최대 크기는 2147483647입니다.

cmd.Parameters.Add("@blah", OleDbType.LongVarChar, -1).Value = "very big string";

1

size 매개 변수를 전달할 필요는 없으며 Varchar이미 다음과 같이 MAX 임을 이해한다고 선언 하면됩니다.

cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";

1
실행 계획이 계산되는 방식으로 인해 SQL 서버에 부정적인 영향을 줄 수 있습니다.
yaakov

출력 매개 변수를 사용할 때 이것이 사실이 아니라는 것을 알았습니다. 다음과 같은 오류가 발생합니다. Exception : String [2] : Size 속성의 크기가 0입니다.이 문제를 해결하려면 Size = -1을 사용하십시오. stackoverflow.com/questions/21087950/…
Michael K

1

이런 식으로하면 :

    cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";

크기는 "일부 큰 텍스트"에서 가져옵니다.

이것은 출력 매개 변수 일 때 문제가 될 수 있습니다. 더 이상 문자를 반환하지 않고 입력으로 넣습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.