Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL错误(245):将nvarchar值“50%”转换为数据类型int时,转换失败_Sql_Sql Server_Sql Server 2014_Sql Server 2014 Express - Fatal编程技术网

SQL错误(245):将nvarchar值“50%”转换为数据类型int时,转换失败

SQL错误(245):将nvarchar值“50%”转换为数据类型int时,转换失败,sql,sql-server,sql-server-2014,sql-server-2014-express,Sql,Sql Server,Sql Server 2014,Sql Server 2014 Express,定义 资料 质疑 上面的查询工作正常,并显示数据。但当我将前200改为201时,它会抛出下面的错误 如果我运行Top201语句2到3次,它就会显示数据。同样,如果我将Top 201更改为202,则再次出现错误popsup 任何建议都会很有帮助 注:- 使用where IsExceeds>0条件时出现问题。此外,我认为IsExceeds计算可能会导致此问题。真正的问题是您的设计,修复它,问题就会消失。列Pro_PCT显然是int,列Max_off显然是十进制;因为这是一个百分比 我们将首先修复Pr

定义

资料

质疑

上面的查询工作正常,并显示数据。但当我将前200改为201时,它会抛出下面的错误

如果我运行Top201语句2到3次,它就会显示数据。同样,如果我将Top 201更改为202,则再次出现错误popsup

任何建议都会很有帮助

注:-
使用where IsExceeds>0条件时出现问题。此外,我认为IsExceeds计算可能会导致此问题。

真正的问题是您的设计,修复它,问题就会消失。列Pro_PCT显然是int,列Max_off显然是十进制;因为这是一个百分比

我们将首先修复Pro_Pct。首先检查是否有任何值不好,我不怀疑会有,因为您将数字数据存储为nvarchar:

选择您的ID列 专业PCT 从dbo.YourTable 其中TRY_CONVERTint、Pro_PCT为空 Pro_PCT不为空; 这将为您提供所有不良数据的数据集。您需要修复所有这些值

之后,您可以更改表格:

ALTER TABLE dbo.YourTable ALTER COLUMN ProPCT int NULL-根据需要更改为NOTNULL 现在是百分比。首先,我们需要删除所有百分比“%”字符,并将该值转换为十进制。再一次,让我们得到坏数据:

选择您的ID列, [Max_Off] 从dbo.YourTable 其中TRY_CONVERTdecimal10,4,REPLACEMax_Off,N“%”,N 并且Max_Off不为空; 同样,修复所有无法转换的值。然后可以更新该值,然后更改该表:

更新dbo.YourTable SET Max_Off=TRY_CONVERTdecimal6,4,REPLACEMax_Off,N“%”,N/100.00 去 ALTER TABLE dbo.YourTable ALTER COLUMN Max_Off decimal6,4不为空-如果需要,再次更改为NULL
现在您的数据已经修复,您应该可以更轻松地实现IsExcess的逻辑。

真正的问题是您的设计,修复它,问题就会消失。列Pro_PCT显然是int,列Max_off显然是十进制;因为这是一个百分比

我们将首先修复Pro_Pct。首先检查是否有任何值不好,我不怀疑会有,因为您将数字数据存储为nvarchar:

选择您的ID列 专业PCT 从dbo.YourTable 其中TRY_CONVERTint、Pro_PCT为空 Pro_PCT不为空; 这将为您提供所有不良数据的数据集。您需要修复所有这些值

之后,您可以更改表格:

ALTER TABLE dbo.YourTable ALTER COLUMN ProPCT int NULL-根据需要更改为NOTNULL 现在是百分比。首先,我们需要删除所有百分比“%”字符,并将该值转换为十进制。再一次,让我们得到坏数据:

选择您的ID列, [Max_Off] 从dbo.YourTable 其中TRY_CONVERTdecimal10,4,REPLACEMax_Off,N“%”,N 并且Max_Off不为空; 同样,修复所有无法转换的值。然后可以更新该值,然后更改该表:

更新dbo.YourTable SET Max_Off=TRY_CONVERTdecimal6,4,REPLACEMax_Off,N“%”,N/100.00 去 ALTER TABLE dbo.YourTable ALTER COLUMN Max_Off decimal6,4不为空-如果需要,再次更改为NULL
现在您的数据已修复,您应该可以更轻松地实现IsExcess的逻辑。

这里的错误告诉您问题所在。然而,真正的问题是,为什么要将数字数据存储为nvarchar?例如,百分比是一个十进制值:100%是1.00,73.27%是0.7327。[Pro_PCT]和[Max_Off]数据都存储为文本。你能告诉我怎么处理这件事吗。更新了我问题末尾的注释。如果无法更改数据,则必须分析非数字文字的数据及其典型格式。我们看到的一个是字符串中的百分号。错误消息也会这样说。请尝试:CONVERT[int]、REPLACE[Pro_PCT]、“%”、-CONVERT[int]、REPLACE[Max_Off]、“%”。麻烦的第201行中有什么数据?这里的错误告诉您问题所在。然而,真正的问题是,为什么要将数字数据存储为nvarchar?例如,百分比是一个十进制值:100%是1.00,73.27%是0.7327。[Pro_PCT]和[Max_Off]数据都存储为文本。你能告诉我怎么处理这件事吗。更新了我问题末尾的注释。如果无法更改数据,则必须分析非数字文字的数据及其典型格式。我们看到的一个是字符串中的百分号。错误消息也会这样说。因此,请尝试:CONVERT[int]、REPLACE[Pro_PCT]、“%”、-CONVERT[int]、REPLACE[Max_Off]、“%”。麻烦的第201行中有什么数据?
[Rec_Num] [int] IDENTITY(1,1) NOT NULL,
[Pro_PCT] [nvarchar](50) NULL
[Max_Off] [nvarchar](50) NULL
[IsExceeds]  AS (CONVERT([int],[Pro_PCT])-CONVERT([int],replace([Max_Off],'%','')))
select top 200 * from dbo.FO_Entry
where isexceeds>0
order by Rec_Num desc