2016-04-08 8 views
0

列パラメータを渡しながらintフィールドを更新しようとしています。これはvarchar、float、moneyフィールドを入力しようとするとうまく動作しますが、intでは正しく動作しません。このSPをint値で実行しようとするとこのエラーが発生します。ストアドプロシージャ:列パラメータで渡すIntフィールドを更新します。

データ型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文を使用することです。

関連する問題