存储过程:更新传递Column参数的Int字段

时间:2016-04-08 13:41:48

标签: sql tsql dynamic-sql

我正在尝试在传递列参数时更新int字段。当我尝试输入varchar,float或money字段时,这可以成功,但不适用于int。当我尝试使用int值执行此SP时,我收到此错误:

  

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

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

`

1 个答案:

答案 0 :(得分:0)

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

一种方法是根据需要填写@dataTypes或将它们放入表中并使用if语句来选择正确的查询。