Dynamisches SQL Nicht Konvertieren von VARCHAR Zu INT. (sollte das nicht irgendwie)
Ich erhalte eine Fehlermeldung:
Fehler bei der Konvertierung beim konvertieren den varchar-Wert 'INSERT INTO TableRowCount (IntFieldID, DecimalField) WÄHLEN Sie" Daten-Typ "int"
Verwenden Sie den folgenden code:
DECLARE @start INT -- @start is an INT
SET @start = 1 -- INT
DECLARE @sql NVARCHAR(MAX)
SET @sql = 'INSERT INTO TableRowCount (IntFieldID, DecimalField)
SELECT ' + @start +', COUNT(*)
FROM dbo.somewhere' -- location is irrelevant
EXECUTE(@sql) -- this is where it fails
Wenn ich entfernen IntFieldID
und die @start
es wird die Arbeit mit einer Beilage (obwohl es Niederlagen der Zweck). Ich habe versucht, darunter eine SELECT CAST(' + @start + ' AS INT)
, das scheint ein wenig überflüssig, da @start
ist ein INT
schon (Gießen ein INT
als INT
), aber das funktioniert auch nicht. Ich habe auch versucht, beginnend mit einer N'
DYNAMIC-SQL -, die nicht arbeiten, ich habe versucht, mit drei '''
um alles (nicht Arbeit), und in ein paar Orte, die ich online Lesen, Antworten vorgeschlagen, setzen Sie die variable in den string, der den Fehler generiert:
Erklären muß, Skalare variable @start
(keine überraschung, als das nicht richtig).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie konvertieren Sie Ihre
@Start
zu einemvarchar
.SQL Server implizit konvertiert zwischen Datentypen, die auf der Verkettung oder Ergänzung stützt sich auf einige ziemlich komplexe Kriterien. Es genügt zu sagen, wenn Sie versuchen, kombinieren Sie eine
int
und ein string wird immer versuchen, konvertieren Sie die Zeichenfolge in eineint
es sei denn, Sie sagen es nicht ausdrücklich anders.Unten ist eine umrechnungstabelle für Ihre Referenz aus der MSDN-Website.
Einen besseren Weg, als zu versuchen, verketten einen integer zu übergeben, es als eine stark typisierte parameter: