我正在尝试在传递列参数时更新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
`
答案 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语句来选择正确的查询。