将 nvarchar 值...转换为数据类型 int 时转换失败

Posted

技术标签:

【中文标题】将 nvarchar 值...转换为数据类型 int 时转换失败【英文标题】:Conversion failed when converting the nvarchar value ... to data type int 【发布时间】:2014-02-09 04:04:58 【问题描述】:

我创建了下面列出的程序:

CREATE procedure getdata
(
    @ID int,
    @frm varchar(250),
    @to varchar(250)
)
AS
BEGIN

DECLARE @SQL nvarchar(500)


set @SQL = 'select'
set @SQL = @SQL + ' EmpName, Address, Salary from Emp_Tb where 1=1 '

IF (@ID <> '' and @ID is not null)     
  Begin     
   SET @sql=@sql+' AND Emp_Id_Pk=' +@ID   
  End 
END

print @sql
--execute (@sql)

我尝试使用:

**execute getdata 3,'','';**

但我收到以下错误:

转换 nvarchar 值时转换失败 'select EmpName, 地址、工资从 Emp_Tb where 1=1 AND Emp_Id_Pk=' 到数据类型 int

请帮忙。

【问题讨论】:

如果你想对带有样式的数据进行转换,也可以使用Convert函数。 【参考方案1】:

您正在尝试连接字符串和整数。 您需要将cast@ID 作为字符串。 试试:

SET @sql=@sql+' AND Emp_Id_Pk=' + CAST(@ID AS NVARCHAR(10))

【讨论】:

【参考方案2】:

尝试使用

CONVERT(nvarchar(10),@ID)

这类似于演员,但成本较低(就所消耗的时间而言)

【讨论】:

这种说法未经证实——可以根据您自己的数据采取任何一种方式。总结一下answer,CONVERT 是特定于 SQL Server 的,CAST 是 ANSI。建议尽可能使用 CAST。【参考方案3】:

我在我的一个专栏中使用了一个关键字,我用brackets []解决了这个问题

【讨论】:

如何在我的代码中实现它,你能给我举个例子【参考方案4】:

我遇到了同样的问题,我删除了相关列的约束,它对我有用。您可以检查文件夹约束。

捕获:

【讨论】:

【参考方案5】:

不要使用字符串连接产生sql,可以使用sp_executesql系统存储过程来执行带参数的sql语句

create procedure getdata @ID int, @frm varchar(250), @to varchar(250) as
begin
    declare @sql nvarchar(max), @paramDefs nvarchar(max);

    set nocount on;

    set @sql = N'select EmpName, Address, Salary from Emp_Tb where @id is null or Emp_Id_Pk = @id';
    set @paramDefs = N'@id int';
    execute sp_executesql @sql, @paramDefs, @id = @ID;
end

见sp_executesql

【讨论】:

【参考方案6】:

我使用最新版本的 SSMS 或 sql server management studio。我有一个 SQL 脚本(在查询编辑器中),它有大约 100 行代码。这是我在查询中遇到的错误:

Msg 245, Level 16, State 1, Line 2
Conversion failed when converting the nvarchar value 'abcd' to data type int.

解决方案 - 在我忘记将数字(在 varchar 列中)用单引号括起来之前,我曾见过这种错误。

顺便说一句,错误消息具有误导性。查询编辑器中第 70 行的实际错误,而不是错误所说的第 2 行!

【讨论】:

【参考方案7】:

您收到此错误是因为您尝试将列 DataTypeString 转换为 int,即

leagal if and only if

您在该表中没有该列中包含字符串内容的行

所以只需确保您之前插入的行compatible with the new changes

【讨论】:

【参考方案8】:

当我使用查看 nvarchar 字段但未使用单引号的 where 子句时出现此错误。

我的无效 SQL 查询如下所示:

SELECT * FROM RandomTable WHERE Id IN (SELECT Id FROM RandomTable WHERE [Number] = 13028533)

这不起作用,因为 Number 列的数据类型为 nvarchar。这不是我最初想的 int。

我改成:

SELECT * FROM RandomTable WHERE Id IN (SELECT Id FROM RandomTable WHERE [Number] = '13028533')

它奏效了。

【讨论】:

以上是关于将 nvarchar 值...转换为数据类型 int 时转换失败的主要内容,如果未能解决你的问题,请参考以下文章

SQL 异常:将 nvarchar 值“[anyvalue]”转换为数据类型 int 时转换失败

nvarchar 值转换为数据类型为 int 发生语法错误

org.hibernate.exception.SQLGrammarException:将 nvarchar 值“ViewWebApp”转换为数据类型 int 时转换失败

将 nvarchar 值转换为数据类型 int 和其他 SQL Server 错误时失败

将 nvarchar 转换为数据类型 int 时出错

在 SQL Server 2008 中将 NVARCHAR 转换为 INT 数据类型