34,838
社区成员




用C#中的SqldataAdapter.update()方法最快
DECLARE @xml XML
SET @xml='
<Data>
<Item>
<Date>a1</Date>
<Type>a</Type>
<Value>1</Value>
</Item>
<Item>
<Date>b2</Date>
<Type>b</Type>
<Value>2</Value>
</Item>
<Item>
<Date>c3</Date>
<Type>c</Type>
<Value>3</Value>
</Item>
<Item>
<Date>d4</Date>
<Type>d/Type>
<Value>4</Value>
</Item>
</Data>
'
CREATE TABLE #Temp (
[Date] VARCHAR(10) NOT NULL,
[Type] VARCHAR(10) NOT NULL,
[Value] INT NULL,
PRIMARY KEY([Date],[Type])
)
INSERT INTO #Temp
SELECT c.value('Date[1]', 'VARCHAR(10)') AS [Date],
c.value('Type[1]', 'VARCHAR(10)') AS [Type],
c.value('Value[1]', 'VARCHAR(10)') AS [Value]
FROM @xml.nodes('/Data/Item') T(c)
UPDATE [YOURTARGETTABLE]
SET [Value] = #Temp.Value
FROM [YOURTARGETTABLE] INNER JOIN #Temp
ON [YOURTARGETTABLE].[Date] = #Temp.Date
AND [YOURTARGETTABLE].[Type] = #Temp.[Type]
INSERT INTO [YOURTARGETTABLE] ([Date],[Type],Value)
SELECT [Date],[Type],Value
FROM #Temp
WHERE NOT EXISTS (SELECT 1 FROM [YOURTARGETTABLE] INNER JOIN #Temp
ON [YOURTARGETTABLE].[Date] = #Temp.Date
AND [YOURTARGETTABLE].[Type] = #Temp.[Type])
DROP TABLE #Temp
太高深了,不懂,帮顶,蹭分
Private Sub SimpleButton19_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SimpleButton19.Click
Dim oDataBase As Database
Dim oDataReader As IDataReader = Nothing
Dim oDbCommand As DbCommand
Dim t As Integer = 0
Dim sqlstr As String = ""
Dim arr(5000, 2) As Integer '你的数组
Try
For i As Integer = 0 To 5000
arr(i, 0) = i * 1
arr(i, 1) = i * 2
arr(i, 2) = i * 3
Next
For i As Integer = 0 To 5000
sqlstr = sqlstr + " insert @Temp select '" + arr(i, 0).ToString() + "','" + arr(i, 1).ToString() + "','U" + arr(i, 2).ToString() + "'" '一批批的提交,一几提交100多条,这考虑varchar(max)的长度
If (sqlstr.Length > 7000 And sqlstr.Length < 8000) Or (i = 5000 And sqlstr.Length < 7000) Then
sqlstr = " declare @Temp table(Date nvarchar(10),[Type] nvarchar(10), [Value] nvarchar(10)) " + sqlstr
oDataBase = DatabaseFactory.CreateDatabase()
oDbCommand = oDataBase.GetStoredProcCommand("ProcKK")
oDataBase.AddInParameter(oDbCommand, "@Sql", DbType.String, sqlstr)
oDataBase.ExecuteNonQuery(oDbCommand)
sqlstr = ""
End If
Next
Catch ex As Exception
Dim rethrow As Boolean = ExceptionPolicy.HandleException(ex, "DALPolicy")
If (rethrow) Then
Throw
End If
Finally
If Not oDataReader Is Nothing Then
oDataReader.Close()
End If
End Try
End Sub
create Table TryTable(Date nvarchar(10),[Type] nvarchar(10), [Value] nvarchar(10))
declare @i as int
set @i=0
while @i<=4000
begin
insert TryTable
select cast(@i*1 as nvarchar(10)),cast(@i*2 as nvarchar(10)),cast(@i*3 as nvarchar(10))
set @i=@i+1
end
--存储过程
alter proc ProcKK
@Sql as varchar(max) --这里是传上边VB码的字符串变量sqlstr
as
set @sql=@sql+' update TryTable set TryTable.[Value]=t.[Value] from @Temp as t where '+
' TryTable.Date=t.Date and TryTable.[Type]=t.[Type] '+
' insert TryTable select * from @Temp as t where not exists'+
' (select 1 from TryTable as t1 where t1.[Date]=t.[Date] and t1.[Type]=t.[Type])'
exec (@sql)