codememo

문자열 또는 이진 데이터가 잘립니다.전표가 종료되었습니다.

tipmemo 2023. 5. 28. 20:50
반응형

문자열 또는 이진 데이터가 잘립니다.전표가 종료되었습니다.

SQL 서버에서 문제가 발생했습니다. 다음은 제가 만든 기능입니다.

ALTER FUNCTION [dbo].[testing1](@price int)
RETURNS @trackingItems1 TABLE (
   item       nvarchar  NULL,
   warehouse   nvarchar NULL,
   price int   NULL
) 
AS
BEGIN
   INSERT INTO @trackingItems1(item, warehouse, price)
   SELECT ta.item, ta.warehouse, ta.price 
   FROM   stock ta
   WHERE  ta.price >= @price; 

   RETURN;
END;

다음과 같이 해당 기능을 사용하기 위해 쿼리를 작성하면 오류가 발생합니다.

문자열 또는 이진 데이터가 잘립니다.전표가 종료되었습니다.

이 문제를 어떻게 해결할 수 있습니까?

select * from testing1(2)

이것이 내가 표를 만드는 방법입니다.

CREATE TABLE stock(item       nvarchar(50) NULL,
                   warehouse   nvarchar(50) NULL,
                   price int NULL);

길이가 없는 etc를 정의하면 기본값은 1입니다.

n이 데이터 정의 또는 변수 선언 문에 지정되지 않은 경우 기본 길이는 1입니다.CAST 기능으로 n을 지정하지 않은 경우 기본 길이는 30입니다.

그래서, 만약 당신이 400바이트를 예상한다면.@trackingItems1의 칼럼.stock,사용하다nvarchar(400).

그렇지 않으면 1자 이상의 문자를 입력하려고 합니다.nvarchar(1)실패한

코멘트로서, 이것은 "다중 문"이기 때문에 테이블 값 함수를 잘못 사용하는 것이기도 합니다.이것은 이렇게 쓸 수 있고 더 잘 실행될 것입니다.

ALTER FUNCTION [dbo].[testing1](@price int)
RETURNS
AS
   SELECT ta.item, ta.warehouse, ta.price 
   FROM   stock ta
   WHERE  ta.price >= @price;

물론, 당신은 그냥 일반적인 SELECT 문을 사용할 수 있습니다.

대상 열의 최대 길이가 삽입하려는 값보다 짧습니다.

SQL 관리자에서 테이블을 마우스 오른쪽 단추로 클릭하고 '설계'로 이동하여 테이블 구조 및 열 정의를 시각화합니다.

편집:

nvarchar 삽입물의 길이를 테이블에 정의된 길이와 같거나 짧게 설정합니다.

저의 경우, 제 테이블이 이 오류를 일으켰기 때문에

varchar(50)

하지만 67자 길이의 문자열을 주입하는 과정에서 이 오류가 발생했습니다.로 변경

varchar(255)

문제를 해결했습니다.

[dbo]와 같이 항목 창고의 크기를 지정합니다.[testing1] FUNCTION

@trackingItems1 TABLE (
item       nvarchar(25)  NULL, -- 25 OR equal size of your item column
warehouse   nvarchar(25) NULL, -- same as above
price int   NULL

) 

MSSQL에서는 nvarchar만 nvarchar(1)라고 말하기 때문에 주식 테이블의 열 값이 잘립니다.

SQL Server 2016 SP2 CU6 및 SQL Server 2017 CU12에는 절단 경고의 세부 정보를 반환하기 위해 추적 플래그 460이 도입되었습니다.쿼리 수준 또는 서버 수준에서 사용 가능으로 설정할 수 있습니다.

쿼리 수준

INSERT INTO dbo.TEST (ColumnTest)
VALUES (‘Test truncation warnings’)
OPTION (QUERYTRACEON 460);
GO

서버 수준

DBCC TRACEON(460, -1);
GO

SQL Server 2019부터는 데이터베이스 수준에서 다음을 활성화할 수 있습니다.

ALTER DATABASE SCOPED CONFIGURATION 
SET VERBOSE_TRUNCATION_WARNINGS = ON;

이전 출력 메시지는 다음과 같습니다.

Msg 8152, Level 16, State 30, Line 13
String or binary data would be truncated.
The statement has been terminated.

새 출력 메시지는 다음과 같습니다.

Msg 2628, Level 16, State 1, Line 30
String or binary data would be truncated in table 'DbTest.dbo.TEST', column 'ColumnTest'. Truncated value: ‘Test truncation warnings‘'.

향후 SQL Server 2019 릴리스에서는 메시지 2628이 기본적으로 메시지 8152를 대체합니다.

언급URL : https://stackoverflow.com/questions/15019397/string-or-binary-data-would-be-truncated-the-statement-has-been-terminated

반응형