Sql server 特定行上的Openrowset批量插入

Sql server 特定行上的Openrowset批量插入,sql-server,Sql Server,我不熟悉SQL,但正在尝试学习它的逻辑,我假设bulk insert将在所有行上插入一个blob。(pdf文件)下面是我的代码,但我正在尝试完成的是,插入一个pdf文件,该文件已放在SQL server上的一行中,该行具有我指定的匹配主键。到目前为止,我缺少指定PK的where子句 Declare @sql varchar(max) Declare @filePath varchar(max) Set @filePath = 'C:\iphone.pdf' Set @sq

我不熟悉SQL,但正在尝试学习它的逻辑,我假设bulk insert将在所有行上插入一个blob。(pdf文件)下面是我的代码,但我正在尝试完成的是,插入一个pdf文件,该文件已放在SQL server上的一行中,该行具有我指定的匹配主键。到目前为止,我缺少指定PK的where子句

   Declare @sql varchar(max)
   Declare @filePath varchar(max)
   Set @filePath = 'C:\iphone.pdf'
   Set @sql='INSERT INTO HDData.dbo.PurchasedCellPhoneInfo(Receipt) SELECT * FROM OPENROWSET(BULK '''+ @filePath+''', SINGLE_BLOB) AS BLOB'
   exec(@sql)
我可以使用update t-SQL查询而不是insert吗?我将如何删除指定要插入该blob的特定行的位置? 任何帮助都将不胜感激

我也尝试过这一点,遵循@misterPositive对更新查询的建议:

 Declare @criteria varchar(50)
 SET @criteria ='352014075399147'
 UPDATE HDData.dbo.PurchasedCellPhoneInfo SET Receipt =
 (SELECT Receipt FROM OPENROWSET (BULK 'C:\352014075399147.pdf, SINGLE_BLOB') a)
 WHERE(IMEI = @criteria)
我确实收到了这个信息:
必须指定格式化文件或三个选项中的一个选项SINGLE_BLOB、SINGLE_CLOB或SINGLE_NCLOB。我喜欢这个更新查询,因为它似乎适合我要做的事情。

您可以这样做来更新:

UPDATE MyTable 
SET blobField = 
   (SELECT BulkColumn FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a) 
WHERE (CriteriaField = @criteria)
这里是PK的另一种方式

CREATE VIEW [dbo].[VWWorkDataLoad]
AS
SELECT RecordLine
FROM [dbo].[WorkDataLoad];
现在,大容量插入应该如下所示:

BULK INSERT [dbo].[VWWorkDataLoad] FROM 'D:\NPfiles\TS082114.trn' 
WITH (FIRSTROW = 2,FIELDTERMINATOR = ',' , ROWTERMINATOR = '\n');

如果你想插入新记录,那么你可以为你的PK设置一个标识栏,而不必担心它。我还看到了在PK上设计没有标识的表时使用的函数。类似于选择列表中的GetTableNamePK()

如果要更新现有记录,则需要前面提到的where子句。这在测试中对我起了作用:

Update TestBlob Set BinaryData = (SELECT * FROM OPENROWSET(BULK 'c:\temp\test.pdf', SINGLE_BLOB) AS BLOB)
    Where ID = 2
如果您不想使用标识或函数,则此操作有效,其中ID是主键,我想插入PK为3的BLOB:

INSERT INTO TestBlob2 (ID, BinaryData) SELECT 3, * FROM OPENROWSET(BULK 'c:\temp\test.pdf', SINGLE_BLOB) AS BLOB

这是否使用SQL Server?您可以指定PK,只要它不是标识。至少在2014年,我还没有测试过其他版本。谢谢你,先生!我相信这对我很有用,先生,我看到一长串字符,我将尝试检索它并查看文档。但我必须做一些研究,并提出一些问题,谢谢!