【发布时间】:2018-05-06 14:17:11
【问题描述】:
我有一个存储过程,我们称之为存储过程'B'。存储过程“B”调用存储过程“A”,它返回需要插入到存储过程“B”内的临时表中的结果集,以便进行进一步的突变。由于嵌套插入,我使用了OPENROWSET(也尝试了OPENQUERY)。
现在,它似乎工作得很好!但是,除了返回结果集之外,存储过程“A”还在表中执行 INSERTS。奇怪的是,当从存储过程“B”中执行存储过程“A”时,存储过程“A”只返回结果集,根本不插入。它似乎只是跳过了整个INSERT INTO 语句。我尝试在 INSERT 之前和之后放置虚拟SELECT 'test' 断点,它们执行得很好!这怎么可能?
这个查询看起来像这样(我稍微改变了数据和列):
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = 'INSERT INTO #Temp (1,2,3)
SELECT * FROM OPENROWSET (
''SQLOLEDB'',
''Server=(local);TRUSTED_CONNECTION=yes;'',
''SET FMTONLY OFF EXECUTE StoredProcedureA
@Parameter1 = '''''+@InputValue1+'''''
,@Parameter_2 = '''''+@InputValue2+'''''
''
)'
EXEC(@SQL)
不返回任何错误。结果集 (SELECT statement from procedure A) 已正确加载到过程 B 中的 #Temp 中。但是在过程 A 中完成的 INSERT 未执行。
openquery/openrowset 是否不允许 INSERTS 并且只执行 SELECT 输出?我想,也许它是一个安全/权利问题?有没有其他方法可以解决这个问题?
提前谢谢各位!
【问题讨论】:
标签: sql sql-server function stored-procedures sql-server-2014