列数据类型为NVARCHAR(MAX)
。如何将其转换为Integer
?
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 UserID=@UserID))
SET @VAL=(SELECT REPLACE(REPLACE(CONVERT(VARCHAR(70), SUM(CAST(Usr_Priv AS NUMERIC(38, 0)))), '2', '1'), '3', '1') FROM T112_UsrMast WHERE Usr_Id=@UserID)
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 MenuID=@Pos
END
SET @Pos=@Pos+1
SET @len=@len-1
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转换为数据类型numeric的算术溢出错误。
在UsrMast
表中Usr_Priv
值为
10101111111111111111111111111111111111111111111111
请帮帮我。
答案 0 :(得分:0)
您只能在数值数据类型中存储最多此值:
您可以存储的最大长度值最多为38但您的数据为(10101111111111111111111111111111111111111111111111)50个字符数值。所以,没办法......
看看这个:
十进制[(p [,s])]和数字[(p [,s])]: 固定精度和刻度数。使用最大精度时,有效值为 - 10 ^ 38 +1到10 ^ 38 - 1.
bigint: 整数(整数)数据从-2 ^ 63(-9,223,372,036,854,775,808)到2 ^ 63-1(9,223,372,036,854,775,807)。存储大小为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个字节。