Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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 存储过程:更新传入列参数的Int字段_Sql_Tsql_Dynamic Sql - Fatal编程技术网

Sql 存储过程:更新传入列参数的Int字段

Sql 存储过程:更新传入列参数的Int字段,sql,tsql,dynamic-sql,Sql,Tsql,Dynamic Sql,我试图在传递列参数时更新int字段。当我尝试输入varchar、float或money字段时,这会成功工作,但不会输入int。当我尝试使用int值执行此SP时,会出现此错误: 将数据类型varchar转换为int时出错 ` 一种方法是根据需要填写@dataTypes,或者将它们放入表中,然后使用if语句选择适当的查询。您将向存储过程参数传递什么?相反的情况发生在我身上,那就是我只有在尝试转换非整数值时才会出错。 CREATE PROCEDURE [dbo].[spUpdateField] @s

我试图在传递列参数时更新int字段。当我尝试输入varchar、float或money字段时,这会成功工作,但不会输入int。当我尝试使用int值执行此SP时,会出现此错误:

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

`


一种方法是根据需要填写@dataTypes,或者将它们放入表中,然后使用if语句选择适当的查询。

您将向存储过程参数传递什么?相反的情况发生在我身上,那就是我只有在尝试转换非整数值时才会出错。
CREATE PROCEDURE [dbo].[spUpdateField]
 @strOrderNumber nvarchar(50)
, @strField nvarchar(50)
, @strValue nvarchar(50)

AS
Declare 
@sql nvarchar (1000);
set @sql = 'update tblOrder 
SET ' + @strField + ' = ''' + @strValue + '''
WHERE strOrderNumber = ''' + @strOrderNumber + '''' ;

exec sp_executesql @sql;

GO
DECLARE @datatype varchar(max)
SELECT @datatype = DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE 
     TABLE_NAME = 'tblOrder' AND 
     COLUMN_NAME = @strField 

if @dataType = 'int' or @datatype = 'float' Or @datatype = 'tinyInt'
BEGIN 
  Declare @sql nvarchar (1000);
  set @sql = 'update tblOrder 
  SET ' + @strField + ' = '  + @strValue 
  WHERE strOrderNumber = ''' + @strOrderNumber + '''' ;

  exec sp_executesql @sql;
END 
ELSE
  Declare @sql nvarchar (1000);
  set @sql = 'update tblOrder 
  SET ' + @strField + ' = ''' + @strValue + '''
  WHERE strOrderNumber = ''' + @strOrderNumber + '''' ;

  exec sp_executesql @sql;
END