2016-04-08 3 views
0

Ich versuche, ein int-Feld zu aktualisieren, während Sie einen Spaltenparameter übergeben. Dies funktioniert erfolgreich, wenn ich versuche, ein varchar, float oder money-Feld einzugeben, aber nicht für int. Ich erhalte diesen Fehler, wenn ich versuche, dieses SP mit einem int-Wert auszuführen:Gespeicherte Prozedur: Update Int-Feldübergabe in einem Spaltenparameter

Fehler beim Konvertieren des Datentyps varchar in 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

Was übergeben Sie in die Argumente der gespeicherten Prozedur? Das Gegenteil passiert mir, das heißt, ich erhalte nur einen Fehler, wenn ich versuche, nicht ganzzahlige Zahlenwerte zu konvertieren. –

Antwort

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 

Ein Weg in den @dataTypes nach Bedarf zu füllen wäre oder sie in einen Tisch und eine if-Anweisung die richtige Abfrage zu holen.