我试图在T存储过程中执行链接服务器.
但是,我得到了错误。
不能在事务中执行过程'sys.sp_addlinkedserver‘。
这似乎很明显。但是之后我需要使用动态SQL来执行两个查询,但是我试图在执行查询之前添加链接服务器,所以不知道为什么会出现错误。
这是密码。
@sqlDBName VARCHAR(MAX),
@sqlServerName VARCHAR(MAX)
AS
EXEC sp_addlinkedserver
@sqlServerName,
N'SQL Server';
DECLARE @impUpd VARCHAR(MAX)
SET @impUpd = '
UPDATE Customers SET NAME = 'Name'
FROM Customers c
JOIN ['+@sqlServerName +'].['+@sqlDBName +'].[dbo].[CUSTOMERS2]
..etc
exec(@impUpd)
任何帮助都会很好。
谢谢
发布于 2014-05-19 01:58:24
我找到了解决问题的办法。这与SQL无关,而是与从C#和执行存储过程有关。
当我调用SP时发生了错误
m_Context.Database.ExecuteSqlCommand("usp_storedprocedureName");
它的作用是
m_Context.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction,"usp_storedprocedureName");
如果不研究额外的参数是干什么的,我就不能给出它工作的原因(因为枚举说的是不明显的!),但是这里有更多的信息。
发布于 2014-05-19 01:26:51
如果您需要动态地创建一个链接服务器,而不是预先手动创建它,那么在它自己的存储过程中这样做,这样您就有了"http://en.wikipedia.org/wiki/Separation_of_concerns“。
您不希望开始将链接服务器创建添加到执行其他事情的存储过程中,否则它将在许多地方发生。
因此,在您的应用程序中,无论是在启动时还是在代码执行的某个合理点,调用一个存储过程来检查链接的服务器是否存在,如果不存在,则创建它。然后,您可以确定它是否存在。
如果不存在链接服务器,请参见这个职位获得创建链接服务器的代码示例:
样本
DECLARE @sqlServerName VARCHAR(MAX)
IF NOT EXISTS (SELECT 1 from sys.servers where name = @sqlServerName)
BEGIN
PRINT 'Does not exist, need to create link'
EXEC sp_addlinkedserver @server = @sqlServerName, @srvproduct=N'SQL Server'
END
https://stackoverflow.com/questions/23733671
复制相似问题