【发布时间】:2016-05-31 07:06:38
【问题描述】:
在我的 sql 中,我有一个存储过程,它使用链接服务器从其他服务器查询数据。
下面是我的存储过程
CREATE PROCEDURE [FIMS].[GetContactInfo]
@ContactID nvarchar(MAX)
AS
BEGIN
DECLARE @LinkServerName VARCHAR(25)
DECLARE @UserName VARCHAR(25)
DECLARE @Password VARCHAR(25)
SET @LinkServerName = 'myserverip'
SET @UserName = 'username'
SET @Password = 'password'
IF ((@LinkServerName IS NOT NULL) AND (@UserName IS NOT NULL) AND (@Password IS NOT NULL))
BEGIN
IF NOT EXISTS (SELECT 1 FROM master.dbo.sysservers WHERE srvname = @LinkServerName)
BEGIN
exec sp_addlinkedserver @server=@LinkServerName;
exec sp_addlinkedsrvlogin @rmtsrvname= @LinkServerName,@useself=false, @rmtuser=@UserName, @rmtpassword=@Password;
END
DECLARE
@strSQL NVARCHAR(MAX)
SET @strSQL = 'SELECT
fcContact.Name as CompanyName, fcPhone.Area + fcPhone.Prefix + fcPhone.Trunk as ContactNumber
FROM
'+ '[' + @LinkServerName + ']' + '.[MyDB].[AssContactPhone] fcAssContactPhone INNER JOIN
'+ '[' + @LinkServerName + ']' + '.[MyDB].[Contact] fcContact ON fcAssContactPhone.ContactID = fcContact.ContactID INNER JOIN
'+ '[' + @LinkServerName + ']' + '.[MyDB].[Phone] fcPhone ON fcAssContactPhone.PhoneID = fcPhone.PhoneID
where fcContact.ContactID = '+ @ContactID +''
EXEC(@strSQL)
END
END
我在我的实体框架中使用该存储过程,但它总是返回结果为'-1'
如何在我的实体框架中使用此存储过程返回的结果?
【问题讨论】:
-
您正在将静态 'myserverip 分配给链接服务器名称参数。这是正确的吗?如果是,需要什么 NULL 检查
-
@bmsqldev 我所做的只是为了在这里显示存储过程。 Taht 在这里不是问题。
-
好的。从链接服务器获取数据时。您应该遵循以下格式 [链接服务器名称].[数据库名称].[模式名称]。 [表名]。我认为您在动态查询中错过了架构名称/数据库名称
-
能否将 WHERE 子句更改为
WHERE fcContact.ContactID = ''' + @ContactID + '''';并尝试 -
PRINT @strSQL并在SSMS中执行return查询,可以得到线索。
标签: c# sql sql-server stored-procedures entity