developer tip

문자열 또는 이진 데이터가 잘립니다.

copycodes 2020. 10. 24. 10:37
반응형

문자열 또는 이진 데이터가 잘립니다. 그 진술서는 만료되었습니다


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 를 정의 varchar하면 기본값은 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

) 

Since in MSSQL only saying only nvarchar is equal to nvarchar(1) hence the values of the column from the stock table are truncated

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

반응형