我該如何做到這一點?我從遠程鏈接服務器運行表值函數。我試圖添加這個4部分命名沒有鎖,但仍然得到相同的錯誤。即時通訊使用MSSQL 2008遠程桌面函數調用不允許
select * from [110.10.10.100].testdbname.dbo.ufn_getdata('4/25/2013') as tb;(NOLOCK)
我該如何做到這一點?我從遠程鏈接服務器運行表值函數。我試圖添加這個4部分命名沒有鎖,但仍然得到相同的錯誤。即時通訊使用MSSQL 2008遠程桌面函數調用不允許
select * from [110.10.10.100].testdbname.dbo.ufn_getdata('4/25/2013') as tb;(NOLOCK)
您需要添加WITH (NOLOCK)
。不完全確定爲什麼,但我今天剛剛遇到這個問題,這解決了我的問題。
SELECT *
FROM [110.10.10.100].testdbname.dbo.ufn_getdata('4/25/2013') AS tb WITH (NOLOCK);
Nolock不適合我。
然而,使用OPENQUERY做...
與[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
更換DMS_DB.dbo.tfu_V_DMS_Desktop(''de'')'
在一個腳註,問題是OPENQUERY不允許一個變量,所以你不能擁有可變參數。 但是,您可以將所有表和視圖作爲視圖從遠程服務器引用,並且只在本地創建表值函數1:1。但是,這可能會很慢。
OPENQUERY像魔術一樣工作。 – christofr 2015-01-29 11:41:44
注意:引用表格和視圖作爲「同義詞」,而不是 - 更好的變體... – 2016-02-24 13:29:31
這是調用遠程SQL用戶定義的函數在SQL Server 2014返回一個表作爲輸出它的例子爲我工作。
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
繼SQL OpenQuery命令應該是工作,其與包圍
參數值'被替換爲雙‘’
因此,在這種情況下,沒有必要創建一個存儲目標實例數據庫上的程序
SELECT *
FROM OPENQUERY(
[110.10.10.100],
'SELECT * FROM testdbname.dbo.ufn_getdata(''4/25/2013'')'
) as oq
WITH關鍵字的確有竅門。 – 2014-03-14 17:02:47
這會爲我生成一個錯誤。這似乎與http://dba.stackexchange.com/questions/71174/use-nolock-hint-when-calling-table-valued-function上的答案相沖突。 – 2014-07-21 19:41:33
這對我有用。一些舊的代碼只有**(nolock)**,並且在SSMS中使用它時出現錯誤。 **添加**修復了我的問題。 – 2015-11-18 22:01:05