Ian*_*oyd 5 sql-server sql-server-2008-r2
我有一个正在运行的远程存储过程:
EXECUTE Contoso.Frob.dbo.Grobber @StartDate='20140513', @EndDate='20140518'
Run Code Online (Sandbox Code Playgroud)
并且此远程存储过程返回行集:
EmployeeID EmployeeName StartDateTime EndDateTime
---------- -------------- ------------- -----------------------
619 Guyer, Kirsten 2014-05-13 19:00:00.000 2014-05-13 19:00:00.000
...
Run Code Online (Sandbox Code Playgroud)
优秀.完善.好.甜.
现在我有这些结果,我需要将它们存储在一个表中.任何一种表.我不在乎什么样的表:
我只需要存储它们以便我可以处理它们.问题是,当我尝试将结果插入表中时,是否为:
物理表
INSERT INTO EmployeeSchedule
EXECUTE Contoso.Frob.dbo.Grobber @StartDate='20140513', @EndDate='20140518'
Run Code Online (Sandbox Code Playgroud)临时表
INSERT INTO #EmployeeSchedule
EXECUTE Contoso.Frob.dbo.Grobber @StartDate='20140513', @EndDate='20140518'
Run Code Online (Sandbox Code Playgroud)全局临时表
INSERT INTO ##EmployeeSchedule
EXECUTE Contoso.Frob.dbo.Grobber @StartDate='20140513', @EndDate='20140518'
Run Code Online (Sandbox Code Playgroud)表变量
INSERT INTO @EmployeeSchedule
EXECUTE Contoso.Frob.dbo.Grobber @StartDate='20140513', @EndDate='20140518'
Run Code Online (Sandbox Code Playgroud)SQL Server 坚持(不,要求)它开始分布式事务:
用于链接服务器"Contoso"的OLE DB提供程序"SQLNCLI10"返回消息"伙伴事务管理器已禁用其对远程/网络事务的支持.".
消息7391,级别16,状态2,行41
无法执行操作,因为链接服务器"Contoso"的OLE DB提供程序"SQLNCLI10"无法启动分布式事务.
现在,无法对Contoso服务器进行更改.为什么?无所谓.假装杰克鲍尔将出庭并关注任何试图修改Contoso的人.这意味着我无法启用或重新配置MSDTC \\Contoso.
READ UNCOMMITTED吗?是.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
INSERT INTO @EmployeeSchedule
EXECUTE wclnightdb.NGDemo.dbo.tbtGetSchedule @StartDate, @EndDate
Run Code Online (Sandbox Code Playgroud)
合作伙伴事务管理器已禁用其对远程/网络事务的支持.
和:
INSERT INTO #EmployeeSchedule
WITH (NOLOCK)
EXECUTE wclnightdb.NGDemo.dbo.tbtGetSchedule @StartDate, @EndDate
Run Code Online (Sandbox Code Playgroud)
抱歉.没有nolock.诺洛克是不是不
消息1065,级别15,状态1,行15
对于INSERT,UPDATE,DELETE或MERGE语句的目标表,不允许使用NOLOCK和READUNCOMMITTED锁提示.
如果我在编程环境中这样做,那么修复起来相当容易:
using (IDataReader rdr = ADOHelper.Execute(conn, "EXECUTE Contoso.Frob.dbo.Grobber @StartDate='20140513', @EndDate='20140518'")
{
while (rdr.Read())
{
InsertRowIntoTable(conn, rdr);
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这需要我创建一个二进制文件,运送它,并安排它.我正在寻找适用于SQL Server的选项(因此SQL代理可以安排作业).
这个怎么样:
-- 创建一个通过 SQLSMD 命令运行远程 sql 的作业,或者只运行如下所示的命令: EXEC master..xp_cmdshell 'SQLCMD -S Server\SQLSERVERDEV2005 -i"c:\DML.sql"' (可能是作业更容易,因为您可以通过 sp_update_jobstep 轻松修改作业步骤以获得参数的正确值)
-- 将sqlcmd的结果输出到文件中
-- 通过批量导入将文件加载到表中。