SQL SERVER exec存储过程以CASE WHEN条件

时间:2018-06-29 07:33:41

标签: sql sql-server stored-procedures

我有一个查询,该查询从另一台服务器(具有IP LINK)中选择某个表,可以选择表。但是,当我将FUNCTION(存储过程)放入CASE WHEN条件中时,它不起作用。

SELECT
    CASE
WHEN A.TGL IS NULL THEN
    B.TGL
ELSE
    [123.123.111].[DBNAME].dbo.Func_S(A.NOREK, B.NAMA, A.TGL)
END AS TGL_ANSURAN
FROM
    [123.123.111].[DBNAME].dbo.TblName AS A
JOIN [123.123.111].[DBNAME].dbo.TblName2 B ON A.ID = B.ID

执行该操作时,错误消息显示:

  

” [Err] 42000-[SQL Server]远程函数引用'[123.123.111]。[DBNAME] .dbo.Func_S'不允许,并且该列   找不到名称“ 123.123.111”或该名称不明确。”

我的查询出了什么问题? Func_S存在,并且我的服务器已经与网络服务器链接。

1 个答案:

答案 0 :(得分:0)

您应该使用openquery来选择函数-因此请尝试一下是否可行。

select
   a.*
from
   OPENQUERY ( [123.123.111],
'
SELECT
    CASE
WHEN A.TGL IS NULL THEN
    B.TGL
ELSE
   [DBNAME].dbo.Func_S(A.NOREK, B.NAMA, A.TGL)
END AS TGL_ANSURAN
FROM
   [DBNAME].dbo.TblName AS A
JOIN [DBNAME].dbo.TblName2 B ON A.ID = B.ID
' ) a