SQl:从文本文件更新表
我要做的是: 我有一个文本文件,它有3列:SQl:从文本文件更新表,sql,sql-server,tsql,Sql,Sql Server,Tsql,我要做的是: 我有一个文本文件,它有3列:PID,X,Y 现在,我的数据库中有两个表: 表1包含4列:UID、PID、X、Y 表2包含多个列,必填列为UID、X、Y 我需要用相应的X和Y值更新表2 我想我们可以使用批量插入来更新表1,然后在循环时使用一些 但我想不出确切的原因。你打算如何运行它?从存储过程 为了节省一些性能,我将对temp表执行批量插入,然后从temp表插入到表1和表2 应该是这样的 INSERT INTO Table1 ( PID, X, Y) SELECT PID, X
PID,X,Y
现在,我的数据库中有两个表:
包含4列:表1
UID、PID、X、Y
包含多个列,必填列为表2
UID、X、Y
批量插入
来更新表1
,然后在循环时使用一些
但我想不出确切的原因。你打算如何运行它?从存储过程
为了节省一些性能,我将对temp表执行批量插入
,然后从temp表插入到表1和表2
应该是这样的
INSERT INTO Table1 ( PID, X, Y)
SELECT PID, X, Y
FROM #tempTable
有些人会说临时表不好,但这确实取决于—如果文件很大,从磁盘读取它需要时间,而且您不想重复两次。您不需要任何循环来更新表2;您只需从表1中插入insert
或者,如果您试图更新表2中的现有行,请使用连接表1的update
查询
但是,您应该考虑更改数据库设计,因为它看起来不正确:您在两个地方存储了<代码> x<代码>和<代码> y>代码>;它们应该只存储在一个表中,如果需要将它们与其他数据结合使用,则应该连接到此表。如果这样做,就不必担心保持两个表同步的麻烦问题
CREATE PROCEDURE [dbo].[BulkInsert]
(
@PID int ,
@x int,
@y int,
)
AS
BEGIN
SET NOCOUNT ON;
declare @query varchar(max)
CREATE TABLE #TEMP
(
[PID] [int] NOT NULL ,
[x] int NOT NULL,
[y] int NOT NULL,
)
SET @query = 'BULK INSERT #TEMP FROM ''' + PathOfYourTextFile + ''' WITH ( FIELDTERMINATOR = '','',ROWTERMINATOR = ''\n'')'
--print @query
--return
execute(@query)
BEGIN TRAN;
MERGE TableName AS Target
USING (SELECT * FROM #TEMP) AS Source
ON (Target.YourTableId = Source.YourTextFileFieldId)
-- In the above line we are checking if the particular row exists in the table(Table1) then update the Table1 if not then insert the new row in Table-1.
WHEN MATCHED THEN
UPDATE SET
Target.PID= Source.PID, Target.x= Source.x, Target.y= Source.y
WHEN NOT MATCHED BY TARGET THEN
-- Insert statement
您可以使用上述方法来解决您的问题。希望这有帮助。:) 不清楚-是否要将文本文件批量插入表1
,然后从中更新表2
?还是怎样另外:这些列的数据类型是什么?您能给我们看一个示例文本文件吗?请引用您的SQL Server版本(您可以添加进一步的特定标记)是的,形成一个存储过程…我想知道,您如何实现步骤2,从临时表插入表2?最好先加载表1,然后使用表1作为源加载表2。表1具有uid
和pid
之间的链接,这对于加载表2是必需的。