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

use*_*804 21 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)
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下方法执行它:

**execute getdata 3,'','';**
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

将nvarchar值'select EmpName,Address,Salary从Emp_Tb转换为1 = 1 AND Emp_Id_Pk ='转换为数据类型int时转换失败

请帮忙.

Avi*_*ner 51

您正在尝试连接字符串和整数.
你需要强制转换 @ID为字符串.
尝试:

SET @sql=@sql+' AND Emp_Id_Pk=' + CAST(@ID AS NVARCHAR(10))
Run Code Online (Sandbox Code Playgroud)


小智 7

尝试使用

CONVERT(nvarchar(10),@ID)
Run Code Online (Sandbox Code Playgroud)

这类似于 cast 但更便宜(就消耗的时间而言)