valores usuario una tabla por llamar linea las guardan funciones funcion escalares ejemplos donde definidas con sql sql-server user-defined-functions nolock

sql - usuario - No se permiten llamadas a funciones remotas con valores de tabla



llamar a una funcion sql (6)

El siguiente comando SQL OpenQuery debería estar funcionando

Los valores de los parámetros que están rodeados por '' se reemplazan por el doble '' ''

Por lo tanto, en este caso no es necesario crear un procedimiento almacenado en la base de datos de la instancia de destino.

SELECT * FROM OPENQUERY( [110.10.10.100], ''SELECT * FROM testdbname.dbo.ufn_getdata(''''4/25/2013'''')'' ) as oq

¿Cómo puedo hacer que esto funcione? Estoy ejecutando una función con valores de tabla desde un servidor vinculado remoto. Intenté no agregar ningún bloqueo a esta denominación de 4 partes pero aún así obtengo el mismo error. Estoy usando mssql-2008

select * from [110.10.10.100].testdbname.dbo.ufn_getdata(''4/25/2013'') as tb;(NOLOCK)


Este es el ejemplo de llamar a una función remota definida por el usuario de SQL que devuelve una tabla como salida en SQL Server 2014. Está funcionando para mí.

Declare @Param1 Varchar(10) Declare @SqlText nvarchar(4000) Set @Param1 = ''xxx'' Set @SqlText = ''SELECT * FROM Database.dbo.ufn_Function ('''''' + @Param1 + '''''')'' EXEC LinkedServer.Database.dbo.sp_executesql @SqlText


Necesitas añadir WITH (NOLOCK) . No estoy completamente seguro de por qué, pero me encontré con este problema hoy y esto resolvió mi problema.

SELECT * FROM [110.10.10.100].testdbname.dbo.ufn_getdata(''4/25/2013'') AS tb WITH (NOLOCK);


Nolock no funciona para mí.
Sin embargo, usando OPENQUERY hace ...

Reemplace DMS_DB.dbo.tfu_V_DMS_Desktop(''''de'''')'' con [110.10.10.100].testdbname.dbo.ufn_getdata(''''4/25/2013'''')

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''[dbo].[tfu_V_DMS_Desktop]'') AND type in (N''FN'', N''IF'', N''TF'', N''FS'', N''FT'')) DROP FUNCTION [dbo].[tfu_V_DMS_Desktop] GO CREATE FUNCTION [dbo].[tfu_V_DMS_Desktop] ( @param1 int ) RETURNS table AS RETURN ( -- Add the SELECT statement with parameter references here -- SELECT 0 as abc SELECT * FROM OPENQUERY(CORDB2008R2, ''SELECT * FROM DMS_DB.dbo.tfu_V_DMS_Desktop(''''de'''')'') ) GO

En una nota al pie, el problema es que OPENQUERY no permite una variable, por lo que no puede tener parámetros variables. Sin embargo, puede hacer referencia a todas las tablas y vistas como vistas desde un servidor remoto y simplemente crear la función con valores de tabla 1: 1 localmente. Esto probablemente será lento, sin embargo.


También asegúrese de que RPC OUT esté configurado en VERDADERO en las opciones del servidor vinculado. Esta opción también es necesaria cuando intenta ejecutar un procedimiento almacenado en un servidor vinculado. De lo contrario obtendrá el siguiente error.

El servidor ''servername'' no está configurado para RPC


Vea esta respuesta:

Utilizar OPENQUERY

Reemplace la llamada SP con SELECT ... FROM fn() query y debería funcionar.