문자열 또는 이진 데이터가 잘립니다.전표가 종료되었습니다.
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
'codememo' 카테고리의 다른 글
| 날짜 시간과 시간의 차이(Ruby) (0) | 2023.06.02 |
|---|---|
| dyld'__deld_with_deld_with_deld:오류 메시지 없음 (0) | 2023.05.28 |
| gitdiff에서 파일 제외 (0) | 2023.05.28 |
| Mac OS에서 Node.js를 최신 버전으로 업그레이드합니다. (0) | 2023.05.28 |
| Swift: iOS 화면 크기 결정 (0) | 2023.05.28 |