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

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

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

我在Excel中列出了所有停用的资产。 这个列表只包含Asset#

我想更新我的SQL Server表,使所有这些资产(从我的Excel列表) 'deactivated'

我怎样才能做到这一点?

例:

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

你不会说你正在使用什么types的数据库,但是如果它是SQL Server,那么SQL Server Management Studio将提供一个“数据导入和导出向导”。

在这种情况下,我假设你要这样做一次,或至less每年有限的次数。 如果这是一个每天或每周的事件,那么创build一个更正式的过程更好地使用某种定制的应用程序/网页等。

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

然后像你写的那样使用你的SQL:

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

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

此处的过程示例,或searchSQL Server数据导入和导出向导 。 但是,正如我所说的不确定它是否与您的平台有关。

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

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

似乎你的问题是从Excel中获取信息到SQL服务器,要做到这一点,你可以使用

SQL Server链接服务器和分布式查询您可以在这里find信息, 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 

但我只用它与cvsvs,不能告诉你,如果它会工作