使用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,不能告诉你,如果它会工作