0

열 데이터 형식은 NVARCHAR(MAX)입니다. 어떻게하면 Integer으로 변환 할 수 있습니까?NVARCHAR를 INT로 변환

CREATE TABLE UsrMast(Usr_Id int, 
        Usr_Pswd varchar(30), 
        Usr_Priv varchar(100)) 

CREATE TABLE T117_MenuMst(MenuID int, 
          Text varchar(50), 
          Description varchar(200), 
          ParentID int, 
          NavigateUrl varchar(100)) 

저장 프로 시저

CREATE PROCEDURE USP_MENUITEM (@UserID [varchar](50)) 

BEGIN 

    CREATE TABLE #TMP(MenuID INT, Text VARCHAR(50), Description VARCHAR(50), ParentID INT, NavigateUrl VARCHAR(100)) 
    DECLARE @VAL NVARCHAR(MAX), @Pos INT, @len INT 
    --SET @VAL=(SELECT REPLACE(REPLACE(CONVERT(VARCHAR(30), SUM(CAST(PrivilegeID AS NUMERIC(30, 0)))), '2', '1'), '3', '1') FROM tblGroupPrivMst WHERE GroupCode in (SELECT GroupCode FROM tblUserGrpMap WHERE [email protected])) 
    SET @VAL=(SELECT REPLACE(REPLACE(CONVERT(VARCHAR(70), SUM(CAST(Usr_Priv AS NUMERIC(38, 0)))), '2', '1'), '3', '1') FROM T112_UsrMast WHERE [email protected]) 
    SET @Pos=1 
    SET @len=LEN(@VAL) 
    WHILE(@len!=0) 
    BEGIN 
     DECLARE @Value CHAR(1) 
     SET @Value=SUBSTRING(@VAL, @Pos, 1) 
     IF @Value=1 
     BEGIN 
      PRINT @Value 
      INSERT INTO #TMP SELECT * FROM T117_MenuMst WHERE [email protected] 
     END 
     SET @[email protected]+1 
     SET @[email protected] 
    END 
    --For first Node (Inserting The Parent Node) 
    INSERT INTO #TMP SELECT * FROM T117_MenuMst WHERE MenuID IN(SELECT DISTINCT ParentID  FROM #TMP WHERE ParentID NOT IN(SELECT MenuID FROM #TMP)) 
    --For second Node (Inserting The Parent Node) 
    INSERT INTO #TMP SELECT * FROM T117_MenuMst WHERE MenuID IN(SELECT DISTINCT ParentID  FROM #TMP WHERE ParentID NOT IN(SELECT MenuID FROM #TMP)) 
    --For third Node (Inserting The Parent Node) 
    INSERT INTO #TMP SELECT * FROM T117_MenuMst WHERE MenuID IN(SELECT DISTINCT ParentID  FROM #TMP WHERE ParentID NOT IN(SELECT MenuID FROM #TMP)) 

    SELECT * FROM #TMP ORDER BY MenuID ASC 
    DROP TABLE #TMP 
END 

그러나 내가 갖는 : 데이터 형식의 숫자에 NVARCHAR로 변환

산술 오버플로 오류가 발생했습니다. UsrMast 테이블 Usr_Priv 값에

10101111111111111111111111111111111111111111111111 

이 제발 도와주세요입니다.

+0

*** 어떤 데이터베이스 시스템 *** 및 어떤 버전이 있습니까? –

+0

대부분의 데이터베이스 시스템에서 'INT'에 대한 ** 최대 ** 값은 2'147'483'648 (약 20 억 개)입니다. 당신의 문자열은 ** INT **에 대해 너무 비싸 **입니다! ** ** 정확히 ** 오류가 무엇을 말하는지 ... –

+0

SQLSERVER 2008R2, N을 (를) 사용하고 있습니다. 내 오류가 정확히 "데이터 형식 숫자로 nvarchar를 변환하는 산술 오버플로 오류"입니다. – Bannu

답변

0

당신은 숫자 데이터 유형이 값을 저장할 수 있습니다 : 당신이 저장할 수

최대 길이 값은 38 개까지하지만 데이터가 (10101111111111111111111111111111111111111111111111) 50 문자 숫자 값입니다.

  • 진수 [(P [S])] 및 숫자 [(P [S])] : 그래서, 방법 ...

    은이 봐 안 함 고정 정밀도와 규모의 숫자. 최대 정밀도가 사용되는 경우, 유효한 값이있는 행 - 10^38 +1 통해 10^38 - 1

  • BIGINT : 정수 (자연수) -2^63 (-9,223,372,036854775808) 2^63을 통한 데이터 -1 (9,223,372,036854775807). 저장소 크기는 8 바이트입니다.

  • int : -2^31 (-2,147,483,648)에서 2^31-1 (2,147,483,647)까지의 정수 (정수) 데이터입니다. 저장소 크기는 4 바이트입니다. int에 대한 SQL-92 동의어는 정수입니다.

  • smallint : -2^15 (-32,768)에서 2^15-1 (32,767)까지의 정수 데이터. 저장소 크기는 2 바이트입니다.

  • tinyint : 0부터 255까지의 정수 데이터입니다. 저장소 크기는 1 바이트입니다.

관련 문제