Sql server 在函数中选择LinkedServer

Sql server 在函数中选择LinkedServer,sql-server,Sql Server,我正试图在存储过程中使用LinkedServer选择一个函数,但出现了一个错误 错误:不允许远程表值函数调用 因此,我所做的是创建以下代码: DECLARE @YearOF INT = 2019 DECLARE @MonthOF INT = 12 EXEC VM_DB_FMIS.fmis.dbo.sp_executesql N'SELECT * FROM fn_some_function(@YearOF_Q,@MonthOF_Q)' ,N'@YearOF_Q INT, @MonthOF_Q

我正试图在存储过程中使用
LinkedServer
选择一个函数,但出现了一个错误

错误:不允许远程表值函数调用

因此,我所做的是创建以下代码:

DECLARE @YearOF INT = 2019
DECLARE @MonthOF INT = 12

EXEC VM_DB_FMIS.fmis.dbo.sp_executesql N'SELECT * FROM 
fn_some_function(@YearOF_Q,@MonthOF_Q)'
,N'@YearOF_Q INT, @MonthOF_Q INT',@YearOF,@MonthOF
但如果我这样做,那么我需要更新所有使用上述函数的现有存储过程。因此,我尝试用相同的名称创建自己的函数,以产生相同的结果

CREATE function [dbo].[fn_some_function] (
@YearOF INT,
@MonthOF INT
)
RETURNS @DataTable TABLE
(
    obrno VARCHAR(50), 
    YearOF INT
)
BEGIN

DECLARE @t1 TABLE(obrno VARCHAR(50), YearOF INT)

INSERT INTO @t1
EXEC VM_DB_FMIS.fmis.dbo.sp_executesql N'SELECT * FROM 
fn_some_function(@YearOF_Q,@MonthOF_Q)'
,N'@YearOF_Q INT, @MonthOF_Q INT',@YearOF,@MonthOF

INSERT INTO @DataTable
SELECT * FROM @t1
RETURN
END
但现在我得到了这个错误

在函数中无效使用副作用运算符“INSERT EXEC”


那么,还有其他解决办法吗

使用
存储过程
instead@Squirrel如果我这样做,那么我会得到一个错误“INSERT EXEC语句无法嵌套”。@FrostTypinky这可能是因为您正在调用的存储过程中也有一个
INSERT
语句。我相信,对于在存储过程中插入语句,您最多可以使用2个深度