我创建了下面列出的程序:
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
请帮忙。
答案 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)
我遇到了同样的问题,我删除了相关列的约束,它对我有用。您可以检查文件夹约束。
答案 4 :(得分:0)
您收到此错误是因为您尝试将列DataType
从String
转换为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
答案 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')
它奏效了。