Sql server 2008 r2 从临时表更新在SQL Server 2008 R2存储过程中不起作用
我有一个未绑定的访问接口,它将表单中的表打包成XML,并将其发送到SQLServer2008R2数据库上的存储过程 要发送的XML如下所示:Sql server 2008 r2 从临时表更新在SQL Server 2008 R2存储过程中不起作用,sql-server-2008-r2,Sql Server 2008 R2,我有一个未绑定的访问接口,它将表单中的表打包成XML,并将其发送到SQLServer2008R2数据库上的存储过程 要发送的XML如下所示: <maps> <map> <gmapId>1396</gmapId> <citation>Gray, Carlyle; Shepps, V.C.; Conlin, R.R.; Hoskins, D.M.; Shaffner, M.N.; Socolow, A.A.; McLau
<maps>
<map>
<gmapId>1396</gmapId>
<citation>Gray, Carlyle; Shepps, V.C.; Conlin, R.R.; Hoskins, D.M.; Shaffner, M.N.; Socolow, A.A.; McLaughlin, D.B.; Geyer, A.R.; Cate, A.S.; Lytle, W.S.; Bergsten, J.M.; Miller, J.T.; Wood, G.H., Jr.; Arndt, H.H.; Kehn, T.M., 1960, Geologic map of Pennsylvania (1960), Pennsylvania Geological Survey, Map, 1:250000 scale</citation>
<use>no</use>
</map>
</maps>
INSERT INTO dbo.#mapsXref (npsUnitCode, gmapIdF, useForThisPark, citation)
SELECT @unitCode As npsUnitCode,
T.item.value('gmapId[1]','INT') As gmapIdF,
T.item.value('use[1]','VARCHAR(10)') As useForThisPark ,
T.item.value('citation[1]', 'VARCHAR(MAX)') As citation
FROM @mapsList.nodes('maps/map') AS T(item)
我可以通过使用审计表验证XML是否得到了良好的打包,是否包含了正确的信息,以及临时表是否得到了正确的填充:
INSERT INTO dbo.mapsXrefAudit(npsUnitCode, gmapIdF, useForThisPark, citation)
SELECT npsUnitCode, gmapIdF, useForThisPark, citation from dbo.#mapsXref
它只捕获进入temp表的内容,并允许验证数据到服务器的传输以及XML字符串的正确解包
第一次更新工作:
UPDATE map.XREF_GMAP_ID_TRANSLATIONS
SET useForThisPark = t.useForThisPark
FROM map.XREF_GMAP_ID_TRANSLATIONS x INNER JOIN dbo.#mapsXref t
ON x.gmapIdF = t.gmapIdF WHERE x.npsUnitCode = t.npsUnitCode
但是,当存储过程使用临时表更新另一个表时:
UPDATE map.TBL_GMAPS
SET reference = t.citation
FROM dbo.#mapsXref t INNER JOIN map.TBL_GMAPS g
ON g.gmapId = t.gmapIdF
更新不会显示在map.TBL\u GMAPS
中
它已经在另一个SQL Server 2008 R2实例上运行了几年(我目前正试图从我们的DBA处获取旧版本。如果可以,我将使用该信息进行更新)
几周前,我们遇到了服务器故障,数据库被迁移到运行build 10.50.4000的新服务器上。我最终不得不重新设置一堆对象级权限,因为前面提到的access应用程序的各个部分都会抛出有关权限的错误,但我现在似乎没有遇到任何这些问题。我将整个位包装到一个事务中,该事务将回滚,并在出现错误时生成错误消息。但是我在提交时没有错误
除了参数和事务代码之外,我还提到了存储过程的大部分内容。全文如下:
有人知道为什么更新不会出现在我的
map.TBL\u GMAPS
表上吗?我找到了这个。几年前,有人(我)在TBL_GMAP上定义了一个触发器,在插入时自动生成美国地质调查局风格的引用。每当问题中的代码更新表时,触发器就会触发并重新设置引用。为了解决这个问题,我使用了这里的解决方案--
我将上面的更新部分更改为:
SET CONTEXT_INFO 0x555555
UPDATE map.TBL_GMAPS
SET reference = t.citation
FROM dbo.#mapsXref t INNER JOIN map.TBL_GMAPS g
ON g.gmapId = t.gmapIdF
然后在触发器中,检查上下文信息以查看是否已设置
DECLARE @Cinfo VARBINARY(128)
SELECT @Cinfo = CONTEXT_INFO()
If @Cinfo = 0x555555
RETURN
UPDATE map.TBL_GMAPS SET
reference=dbo.createUsgsCitation(m.gmapId)
FROM inserted i INNER JOIN map.TBL_GMAPS m
ON m.gmapId = i.gmapId
这解决了我的问题