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

时间:2014-02-09 04:04:58

标签: sql

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

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的工资,其中1 = 1 AND Emp_Id_Pk ='到数据类型int

请帮忙。

8 个答案:

答案 0 :(得分:46)

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

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

答案 1 :(得分:2)

尝试使用

CONVERT(nvarchar(10),@ID)

这与演员类似,但价格便宜(就消耗的时间而言)

答案 2 :(得分:1)

我在我的一个专栏中使用了KEY字,我用brackets []

解决了这个问题

答案 3 :(得分:0)

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

捕获:http://i.stack.imgur.com/9Wccz.png

答案 4 :(得分:0)

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

<强> leagal if and only if

  

该表中的行没有该列中的字符串内容

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

答案 5 :(得分:0)

不要使用字符串连接来生成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 :(得分:0)

我使用最新版本的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 :(得分:0)

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

我的无效 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')

它奏效了。