我在SQL Server中有一个包含资产的表。
其中一些资产实际上是'deactivated'
但是,在我的表格中,它们都标记为'active'
。
我在Excel中列出了所有已停用资产的列表。此列表仅包含Asset#
。
我想更新我的SQL Server表以生成所有这些资源(来自我的Excel列表)'deactivated'
。
我怎样才能做到这一点?
示例:
UPDATE ASSETTABLE
SET Status = deactivated
where Asset# = (LIST OF ASSET# fields from EXECL)
答案 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并不能告诉你它是否会起作用