2013-12-11 5 views
1

У меня есть лист первенствовать с некоторыми данными:Обновления SQL SERVER база данных из EXCEL

1. Inventory item number 
2. Description 
3. Inventory Database ID (PRIMARY KEY) 

У меня есть около 1000 строк. Я хочу удалить номера элементов в базе данных, соответствующие номеру позиции в моем списке Excel. Я могу написать приложение для этого в .NET, но это кажется слишком сложным.

Есть ли простой способ через excel или SQL Server запустить SQL-запрос для удаления номеров элементов в моем листе excel без проблем при создании приложения?

+0

У вас есть доступ к SQL Server Management Studio? – nutsch

ответ

3

Для быстрых обновлений. Я считаю, что это лучший метод.

Добавить столбец в Excel и построить ваш оператор обновления в виде формулы, то есть:

="DELETE Table1 WHERE ItemNumber='"&A1&"' AND InventoryId = "&C1 

Скопируйте формулу вниз, и копировать/вставить результат в окне SQL и запустите его.

Pro tip, если у вас есть много апострофов, с которыми можно иметь дело, возможно, стоит сделать глобальную находку/замену заранее. Или вы можете иметь дело с ними по формуле. то есть:

="DELETE Table1 WHERE ItemNumber='"&SUBSTITUTE(A1,"'","''")&"' AND InventoryId = "&C1 
+0

+1 Точно, где я собирался с моим вопросом. – nutsch

+1

для апострофов, вы можете быстро обновить формулу '=" DELETE Table1 WHERE ItemNumber = '"& replace (A1,"' "," ") &" 'AND InventoryId = "& C1' – nutsch

+0

Спасибо @nutsch, I обновил мой ответ, чтобы быть более основательным. Обычно глобальная находка/замена безопасна, так как добавление типа столбца уничтожает файл для других целей. – Malk

0

Если вы не хотите, чтобы пройти через интерфейс SQL, вы можете запустить приложенный код из Excel, после обновления строки соединения, очевидно.

Sub ExecuteSQLCommand() 
'Execute the SQL string passed through 

Dim conn As ADODB.Connection, strConn As String, sSQLCommand As String 
Dim cmd As ADODB.Command, lLoop As Long, lLastRow As Long 

Set conn = New ADODB.Connection 
conn.ConnectionString = "Provider=SQLOLEDB;" & _ 
           "Data Source=DCC08SQL;" & _ 
           "Initial Catalog=HarvestPress;" & _ 
           "Integrated Security=SSPI;" & _ 
           "Database=HarvestPress;" & _ 
           "Trusted_Connection=True;" 

conn.Open 

Set cmd = New ADODB.Command 

lLastRow = Cells(Rows.Count, 1).End(xlUp).Row 

With cmd 
    .ActiveConnection = conn 
    .CommandType = adCmdText 

    For lLoop = 1 To lLastRow 
     sSQLCommand = "DELETE FROM Table1 WHERE ItemNumber='" & Cells(lLoop, 1) & "' AND InventoryId = " & Cells(lLoop, 1) 
     .CommandText = sSQLCommand 
     .Execute 
    Next lLoop 

End With 

conn.Close 
Set conn = Nothing 
Set cmd = Nothing 

End Sub 
Смежные вопросы