27,580
社区成员




FUNCTION [dbo].[FU1]
(
@V_1 VARCHAR(255),@V_2 VARCHAR(255),
)
RETURNS @TABLE TABLE (A varchar(25))
AS
BEGIN
DECLARE @sql varchar(500)
DECLARE @A varchar(500)
BEGIN
set @sql = 'select @A=A from openquery(TN,'' select FU_1('''''+@V_1+''''''+','+''''''+@V_2+'''''') AS A from dual'')';
execute sp_executesql @sql;
INSERT INTO @TABLE (A) values(@A)
end
RETURN
END
CREATE VIEW [dbo].[V_AAA]
AS
select a.Comp,
a.EmpId,
s.State
from AAA a
JOIN openquery(TN, 'SELECT Comp,EmpId,State FROM sourceTable') s
ON a.Comp = s.Comp
AND a.EmpId = s.EmpId
CREATE OR REPLACE FUNCTION FU_1(V_1 varchar,V_2 varchar) RETURN VARCHAR2 AS
V_State varchar2(4);
BEGIN
select State INTO V_State from EMP where Comp=V_1 and EmpId=V_2;
return V_State;
END FU_1;
Sql server function
ALTER FUNCTION [dbo].[FU1]
(
@V_1 VARCHAR(255),
@V_2 VARCHAR(255)
)
RETURNS @TABLE TABLE (State varchar(25))
AS
BEGIN
DECLARE @sql varchar(500)
DECLARE @A varchar(500)
BEGIN
set @sql = 'select @A=A from openquery(TN,'' select FU_1('''''+@V_1+''''''+','+''''''+@V_2+''''') AS A from dual'')';
execute sp_executesql @sql,
N' @A NVARCHAR(50) OUTPUT',
@A= @A OUTPUT
INSERT INTO @TABLE (State) values(@A)
end
RETURN
END
select * from FU1('TN','9909009')
只有函数和一些扩充预存程序可以从函数内执行SELECT id, IIf(IsNull(fid),0,fid) AS x FROM D
DECLARE @sql nvarchar(500)
SET @sql = 'select * from openquery(db1,''SELECT id, IIf(IsNull(fid),0,fid) AS x FROM D'')';
EXECUTE sp_executesql @sql;
DECLARE @sql nvarchar(500)
SET @sql = 'select * from openquery(db1,''SELECT id, ISNULL(fid,0) AS x FROM D'')';
EXECUTE sp_executesql @sql;
链接服务器"db1"的 OLE DB 访问接口 "MSDASQL" 返回了消息 "[Microsoft][ODBC Microsoft Access Driver] 用于函数参数的个数不对 在查询表达式 'ISNULL(fid,0)' 中。"。
消息 7350,级别 16,状态 2,第 1 行
无法从链接服务器 "db1" 的 OLE DB 访问接口"MSDASQL"获取列信息。
-- 内外变量没有自动对应关系,需要显式指定
EXECUTE sp_executesql @sql,
N'@A varchar(500) OUTOUT'
@A = @A OUTPUT;
INSERT INTO @TABLE (A) values(@A)