使用SQL,如何更新表中的记录列表?

时间:2014-08-14 00:53:25

标签: sql sql-server excel tsql

我在SQL Server中有一个包含资产的表。

其中一些资产实际上是'deactivated'但是,在我的表格中,它们都标记为'active'

我在Excel中列出了所有已停用资产的列表。此列表仅包含Asset#

我想更新我的SQL Server表以生成所有这些资源(来自我的Excel列表)'deactivated'

我怎样才能做到这一点?

示例:

UPDATE ASSETTABLE
SET Status = deactivated
where Asset# = (LIST OF ASSET# fields from EXECL)

3 个答案:

答案 0 :(得分:1)

您不会说出您正在使用的数据库类型,但如果它是SQL Server,则SQL Server Management Studio会提供数据导入和导出向导。

在这种情况下,我假设你要做一次性的,或者至少每年只做有限次数。如果这是每日或每周活动,那么使用某种自定义应用程序/网页等创建更正式的流程会更好。

使用“数据导入和导出向导”将Excel数据导入新的临时表,而不是直接导入主表。即使临时表只是已停用的资产编号的列表 - 即,如果更简单,您可以在导入之前过滤excel中的原始数据。

然后几乎在编写时使用SQL:

UPDATE ASSETTABLE
Set Status = 'deactivated'
WHERE AssetNumber in (SELECT ExcelAssetNumber FROM ImportedExcelAssets)

之后,您可以直接在SQL Server Management Studio中删除表,也可以使用我们喜欢的SQL浏览器通过DROP TABLE语句删除表。

过程示例here,或搜索 SQL Server数据导入和导出向导。但正如我所说,不确定它是否与您的平台相关。

答案 1 :(得分:1)

如果它是一个简短列表,那么你可以输入它。

WHERE asset# IN (1,2,3,4)

答案 2 :(得分:0)

似乎你的问题是从excel获取信息到SQL服务器,尽你所能 使用

  

SQL Server链接服务器和分布式查询   你可以在这里找到信息,   http://support.microsoft.com/kb/306397   这里的示例可能会让您了解所需内容,具体取决于您可能需要使用其他数据提供程序的SQL Server版本

在我的情况下,我使用Microsoft.ACE.OLEDB.12.0 你可以这样做:

CREATE TABLE #Temp (Asset int) -- Instead of a Temp table you can use a table variable
DECLARE @SQL nvarchar(MAX)
SET @SQL = ' INSERT INTO #TEMP '
SET @SQL = @SQL +' SELECT Asset '
SET @SQL = @SQL +' FROM '
SET @SQL = @SQL +' OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', '
SET @SQL = @SQL +' ''Excel 12.0 Xml;Database='+ @Path_to_your_Excel_file ';'', '
SET @SQL = @SQL +' ''SELECT * from ' + @Sheet + '''  )' 
-- The path can be to a shared folder or where ever you like
EXEC(@SQL)

UPDATE ASSETTABLE
Set Status = 'deactivated'
WHERE AssetNumber in (SELECT * FROM #Temp)

您还可以尝试BULK INSERT

DECLARE @bulkinsert NVARCHAR(max)
SET @bulkinsert =               ' BULK INSERT #TEMP '
SET @bulkinsert = @bulkinsert + '   FROM ' + '''' +  @Path_to_your_Excel_file + ''''
SET @bulkinsert = @bulkinsert + '   WITH '
SET @bulkinsert = @bulkinsert + '   ('
SET @bulkinsert = @bulkinsert + '       FIELDTERMINATOR = ''\t'','
SET @bulkinsert = @bulkinsert + '       ROWTERMINATOR = ''\n''
SET @bulkinsert = @bulkinsert + '   )'
EXEC sp_executesql @bulkinsert 

但是我只使用它与csvs并不能告诉你它是否会起作用