【发布时间】:2010-09-16 00:37:25
【问题描述】:
我正在使用存储过程通过 MERGE 将数据更新\插入到表中。 插入的项目之一是 VarBinary 文件。现在,如果我想添加一个新文件,只需使用如下所示的 ReadAllBytes 来删除我通过 DBNull 传递的文件。
现在如果其他字段正在更新但文件没有被更改怎么办?我希望该字段保持不变,除非我像上面那样替换文件或删除它...
我无法再次通过参数添加文件,因为它可能只存在于数据库中,除非我先读取它并写回它,这似乎毫无意义。
执行存储过程:
sqlCommand.CommandText = "EXEC sp_UPSERT_MYFILETABLE @Customer_ID, @MyFile"
存储二进制文件:
sqlCommand.Parameters.Add(New SqlParameter("@MyFile", SqlDbType.VarBinary)).Value = File.ReadAllBytes(MyFileLocation)
删除文件:
sqlCommand.Parameters.Add(New SqlParameter("@MyFile", SqlDbType.VarBinary)).Value = DBNull.Value
存储过程:
创建过程 [sp_UPSERT_MYFILEPRO]
@id int,
@MyFile varbinary(MAX),
@Customer_ID int,
@Username varchar(30),
@Password varchar(30),
@AnotherValue varchar(30)
AS
BEGIN
MERGE INTO dbo.Remote_Access_Details AS target
USING (
VALUES (@id
,@Customer_ID
,@Username
,@Password
,@AnotherValue)
) AS source (id
,Customer_ID
,Username
,Password
,AnotherValue)
ON target.Customer_ID = source.Customer_ID
WHEN MATCHED
THEN UPDATE
SET id= source.id
,Username= source.Username
,Password = source.Password
,AnotherValue = source.AnotherValue
WHEN NOT MATCHED
THEN INSERT (Id
,Username
,Password
,AnotherValue)
VALUES (Id
,Username
,Password
,AnotherValue);
END
RETURN
这是基于 SQL 2008 的 VB.net (VS2008)
【问题讨论】:
标签: sql-server vb.net