문자열 또는 이진 데이터가 잘립니다. 그 진술서는 만료되었습니다
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
'developer tip' 카테고리의 다른 글
Lua의 인라인 조건 (a == b? "yes": "no")? (0) | 2020.10.24 |
---|---|
Android 푸시 알림 (GCM), 일일 한도가 있습니까? (0) | 2020.10.24 |
Android 라이브러리 프로젝트 용 jar를 만드는 방법 (0) | 2020.10.24 |
기존 스트림에 새로운 가치 추가 (0) | 2020.10.24 |
find 출력을 캡처합니다. (0) | 2020.10.24 |