2016-06-29 7 views
0

Ich versuche, die Daten von MS Access in eine SQL Server-Datenbank zu kopieren. Eine der Spalten hat den Namen Fill Pressure (psi), der ein Problem in SQL Server verursacht. Ich erhalte den folgenden Fehler:Falsche Syntax muss Skalarvariable deklarieren

"Incorrect syntax near "Psi" must declare the scalar variable @fill.

-Code ist als unten

Dim Cmd As New SqlClient.SqlCommand 
Cmd.Connection = sqlConnection 

For Each dc As DataColumn In AccessTable.Columns 
    colquery = colquery + "[" + dc.ColumnName + "]," 
    valquery = valquery + "@" + dc.ColumnName + "," 
    Cmd.Parameters.AddWithValue("@" + dc.ColumnName, dr(dc.ColumnName)) 
Next 

colquery = colquery.Substring(1, colquery.Length - 1) 
valquery = valquery.Substring(1, valquery.Length - 1) 

colquery = colquery + ")" 
valquery = valquery + ")" 
Sqlquery = colquery + valquery 
Sqlquery = Replace(Sqlquery, ",)", ")") 

Cmd.Connection = sqlConnection 
Cmd.CommandType = CommandType.Text 
Cmd.CommandText = Sqlquery 

Dim sqlcommand1 As SqlClient.SqlCommand = New SqlClient.SqlCommand("SET IDENTITY_INSERT [" + TableName + "] ON", sqlConnection) 
sqlcommand1.ExecuteNonQuery() 
Cmd.ExecuteNonQuery() 

Dim sqlcommand2 As SqlClient.SqlCommand = New SqlClient.SqlCommand("SET IDENTITY_INSERT [" + TableName + "] OFF", sqlConnection) 
sqlcommand2.ExecuteNonQuery() 

Die Probe der Insert-Anweisung aus der Uhr. Ich habe bereits versucht, das Leerzeichen und "(" und ")" durch eine leere Zeichenfolge zu ersetzen, aber es funktioniert nicht.

"INSERT INTO [dbo].[tblVesselTypes] ([VesselType_ID], [Manufacturer],[Model], [Fill Pressure (psi)], [Empty Weight (lbs)], [Full Weight (lbs)], [Liq Liters], [Type], [Size]) 
VALUES (@VesselType_ID, @Manufacturer, @Model, @Fill Pressure (psi), @Empty Weight (lbs), @Full Weight (lbs), @Liq Liters, @Type, @Size)" 
+0

Das Problem ist die Variable '@Fill Druck (psi)' und '@Empty Gewicht (lbs) 'enthält Leerzeichen und Klammern. Versuchen Sie, sie auszubrechen, wenn Sie sie deklarieren/setup 'valquery' – JiggsJedi

+0

Ich habe es bereits versucht und hat nicht geholfen. Die Abfrage lautet wie folgt INSERT INTO [dbo]. [TblVesselTypes] ([VesselType_ID], [Hersteller], [Modell], [Fülldruck (psi)], [Leergewicht (lbs)], [Full Weight (lbs)], [Liq Liter], [Typ], [Größe]) VALUES (@ VesselType_ID, @ Hersteller, @ Modell, @ FillPressurepsi, @ EmptyWeightlbs, @ FullWeightlbs, @ LiqLiters, @ Typ, @ Size) – dotnet

Antwort

1

Es ist unmöglich, Variablen mit Namen wie @Fill Pressure (psi) in MS Sql zu haben. SQL Server würde analysieren, wenn wie @Fill ist ein Variablenname und Pressure (psi) ist unbekanntes Kommando oder Typ (für Variablendeklaration) oder etwas anderes - sowieso Fehler hier.

Siehe Konvention für verschiedene Arten von Objekten in MS SQL Namensgebung:
https://msdn.microsoft.com/en-us/library/ms175874.aspx

Variablenname Leerzeichen oder Klammern kann nicht in ihm hat. Während Objektnamen mit eckigen Klammern oder Anführungszeichen umgeben sein können.

Möglicher Variablenname für Sie, zum Beispiel: @FillPressure_psi

so ganz Insert-Anweisung aussehen würde:

"INSERT INTO [dbo].[tblVesselTypes] ([VesselType_ID], [Manufacturer],[Model], [Fill Pressure (psi)], [Empty Weight (lbs)], [Full Weight (lbs)], [Liq Liters], [Type], [Size]) 
VALUES (@VesselType_ID, @Manufacturer, @Model, @FillPressure_psi, @EmptyWeight_lbs, @FullWeight_lbs, @Liq Liters, @Type, @Size)" 
+0

Dieser funktioniert immer noch nicht. Jetzt bekomme ich eine Fehlermeldung "Syntax Error near Psi. Muss die skalare Variable @FillPressure_psi deklarieren. – dotnet

+0

@dotnet Wie haben Sie vorhergehende Variablen wie @Model deklariert? –

Verwandte Themen