【问题标题】:Create job in sql server agent using view使用视图在 sql server 代理中创建作业
【发布时间】:2016-06-25 06:31:49
【问题描述】:

我有一个问题,如果我可以通过使用每周作业在 sql server 代理中执行视图来将数据填充到表中,还是只能使用存储过程?

View1: 
ALTER VIEW [dbo].[Destinations_1415]

AS

select
sy.styr_student_id,'2014/15' 'Year',q.Surname
,q.Forename,q.Course,pit.prpi_title
,CASE WHEN q.Section = 'BATT' THEN 'BATS' ELSE q.Section collate Latin1_General_CI_AS END AS'Section'
,q.Funding_Type,q.Funding_Body,q.Partner
,c.GNIC_Description 'Outcome',c2.GNIC_Description 'Outcome_Specific'
,q.Completion_Status,sd.stud_mobile_telephone,sd.stud_home_telephone_no
,CASE WHEN sy.STYR_Age_end_Aug < 16 THEN '1416' WHEN sy.STYR_Age_end_Aug < 19 THEN '1618' ELSE '19+' END AgeBand
from sql10.ng.dbo.styrstudentyr sy
Inner join(
SELECT  [Partner Name] 'Partner',[Funding Body] 'Funding_Body'
,[Funding Line] 'Funding_Type', [LearnRefNumber] 'learnerrefnumber'
,ROW_NUMBER()OVER(Partition By LearnRefNumber, [funding line] Order By CompStatus) 'row_no'
,[FamilyName] 'Surname',[GivenNames] 'Forename',[Full Name]
,[ProvSpecDelMon_A] 'Course',[ProvSpecDelMon_B] 'Section',[LearnAimRef] 'Learning_Aim'
,[LearnAimRefTitle] 'Learning_Aim_Title',[FundModel] 'Fundmodel'
,[CompStatus] 'Completion_Status'
FROM [CollegeReporting].[dbo].[PFR_1415_tbl]
where [Funding Line] not like '%appre%'
union all
SELECT  [Partner Name] 'Partner',[Funding Body] 'Funding_Body'
,[Funding Line] 'Funding_Type',[LearnRefNumber] 'learnerrefnumber'
,ROW_NUMBER()OVER(Partition By LearnRefNumber, [funding line] Order By CompStatus) 'row_no'
,[FamilyName] 'Surname',[GivenNames] 'Forename',[Full Name]
,[ProvSpecDelMon_A] 'Course',[ProvSpecDelMon_B] 'Section',[LearnAimRef] 'Learning_Aim'
,[LearnAimRefTitle] 'Learning_Aim_Title',[FundModel] 'Fundmodel',[CompStatus] 'Completion_Status'
FROM [CollegeReporting].[dbo].[PFR_1415_tbl]
where [Funding Line]  like '%appre%'
and LearnAimRef = 'ZPROG001')q on q.learnerrefnumber collate SQL_Latin1_General_CP1_CI_AS = sy.styr_student_id collate SQL_Latin1_General_CP1_CI_AS and q.row_no = '1'
left join sql10.NG.dbo.STDPOutcome o on o.STDP_Student_ID = sy.styr_student_id and o.STDP_Course_Text = '2014'
left join sql10.ng.dbo.GNICodes c on c.GNIC_Code = STDP_Outcome_Type and c.GNIC_Type = 'OUT'
left join sql10.ng.dbo.GNICodes c2 on c2.GNIC_Code = STDP_Outcome_Code and STDP_Outcome_Type = c2.GNIC_Type
left join sql10.ng.dbo.studstudent sd on sd.stud_student_id = sy.styr_student_id
inner join sql10.ng.dbo.PRPIProvisionInstance pit on pit.prpi_code collate Latin1_General_CI_AS = q.Course collate Latin1_General_CI_AS and pit.prpi_instance = '141501'
where sy.styr_year = '2014'

View 2:

ALTER VIEW [dbo].[Destinations_1516]
AS
select
sy.styr_student_id,'2015/16' as 'Year'
,q.Surname,q.Forename,q.Course
,pit.prpi_title,q.Section collate Latin1_General_CI_AS 'Section',q.Funding_Type
,q.Funding_Body,q.Partner,c.GNIC_Description 'Outcome'
,c2.GNIC_Description 'Outcome_Specific',q.Completion_Status
,sd.stud_mobile_telephone,sd.stud_home_telephone_no
, CASE WHEN sy.STYR_Age_end_Aug < 16 THEN '1416' WHEN sy.STYR_Age_end_Aug < 19 THEN '1618' ELSE '19+' END AgeBand
from sql10.ng.dbo.styrstudentyr sy
Inner join(
SELECT  Partner 'Partner'
,[Funding Body] 'Funding_Body',[Funding Line] 'Funding_Type'
,[LearnRefNumber] 'learnerrefnumber'
,ROW_NUMBER()OVER(Partition By LearnRefNumber, [funding line] Order By CompStatus) 'row_no'
,[FamilyName] 'Surname',[GivenNames] 'Forename'
,[Full Name],[coursecode] 'Course'
,[section] 'Section',[LearnAimRef] 'Learning_Aim'
,[coursetitle] 'Learning_Aim_Title',[Fund Model] 'Fundmodel'
,[CompStatus] 'Completion_Status'
FROM [CollegeReporting].[dbo].[PFR_1516]
where [Funding Line] not like '%appre%'
union all
SELECT  Partner 'Partner',[Funding Body] 'Funding_Body',[Funding Line] 'Funding_Type'
,[LearnRefNumber] 'learnerrefnumber'
,ROW_NUMBER()OVER(Partition By LearnRefNumber, [funding line] Order By CompStatus) 'row_no'
,[FamilyName] 'Surname',[GivenNames] 'Forename'
,[Full Name],[coursecode] 'Course'
,[section] 'Section',[LearnAimRef] 'Learning_Aim'
,[coursetitle] 'Learning_Aim_Title',[Fund Model] 'Fundmodel'
,[CompStatus] 'Completion_Status'
FROM [CollegeReporting].[dbo].[PFR_1516]
where [Funding Line]  like '%appre%'
and LearnAimRef = 'ZPROG001')q on q.learnerrefnumber collate SQL_Latin1_General_CP1_CI_AS = sy.styr_student_id collate SQL_Latin1_General_CP1_CI_AS and q.row_no = '1'
left join sql10.NG.dbo.STDPOutcome o on o.STDP_Student_ID = sy.styr_student_id and o.STDP_Course_Text = '2015'
left join sql10.ng.dbo.GNICodes c on c.GNIC_Code = STDP_Outcome_Type and c.GNIC_Type = 'OUT'
left join sql10.ng.dbo.GNICodes c2 on c2.GNIC_Code = STDP_Outcome_Code and STDP_Outcome_Type = c2.GNIC_Type
left join sql10.ng.dbo.studstudent sd on sd.stud_student_id = sy.styr_student_id
inner join sql10.ng.dbo.PRPIProvisionInstance pit on pit.prpi_code collate Latin1_General_CI_AS = q.Course collate Latin1_General_CI_AS and pit.prpi_instance = '151601'
where sy.styr_year = '2015'

View 3 (Union of View 1 and View2 ): 

ALTER VIEW [dbo].[Destinations_1415_1516_Union]

AS

SELECT * FROM [dbo].[Destinations_1415] 

UNION

SELECT * FROM [dbo].[Destinations_1516] 

错误:

链接服务器“sql10”的 OLE DB 提供程序“SQLNCLI10”报告了表“ng”.“dbo”的编译时间(“182244063332028”)和运行时间(“182274129276679”)之间架构版本的变化。 styrstudentyr""。

请告诉我。

【问题讨论】:

  • "执行视图"?
  • 5秒试一试。
  • 恐怕您的错误消息与您在上面发布的查询无关。而且您不是在尝试运行查询,而是在尝试执行作业。
  • 您应该发布与您的情况相关的真实问题,并提供有关您在做什么、在哪里、如何做某事以及您收到的确切错误消息的实际信息。当然,如果您想在这里获得一些帮助。
  • 发布 jobstep 设置屏幕截图、其中的真实查询和您收到的错误消息 - 这将是您真正的问题正文。

标签: sql sql-server view scheduled-tasks jobs


【解决方案1】:

http://www.sqlservercentral.com/Forums/Topic542765-145-1.aspx

如上所述 - 重新创建视图,如果有的话,重新创建同义词。

另一件事-如果您在视图定义中有select *-您肯定会遇到此视图的问题,需要定期重新创建此视图。例如,当底层视图或表的列列表将更改时 - 无论列是被删除、添加还是更改它的位置(列顺序)。我现在不记得错误消息列表 - 其中一些与您得到的类似。关于编译和对象定义的一些奇怪。有些情况不会导致异常,但会产生意想不到的结果。

在您的代码中设计的另一个问题 - insert into 未指定列列表。您节省了一两分钟,没有编写插入列顺序,没有编写选择列顺序,但将不得不浪费更多时间来尝试找出一切出错的原因。

性能问题:为什么有UNION 而不是UNION ALL?第一个视图为year 返回一个常量列值,第二个视图同样如此,这些常量是不同的——那么为什么UNION?没有行可以重复。 Year 列总是不同的。

  1. 重新创建第一级视图和同义词
  2. 重写第二级视图以避免select *union引起的不必要的排序+区别
  3. 用定义的列列表重写插入

【讨论】:

  • 谢谢伊万。我进行了您建议的更改,但仍然出现相同的错误:链接服务器“sql10”的 OLE DB 提供程序“SQLNCLI10”报告了表“的编译时间(“182244062096492”)和运行时间(“182274127729578”)之间架构版本的变化“ "NG"."dbo"."PRPIProvisionInstance"".
  • 我刚刚使用了 dbcc freeproccache 并且查询执行良好,我会尝试看看工作是否正常。
  • 请注意,错误并不相同 - 您从引用 styrstudentyr 表的错误开始,但您在引用 PRPIProvisionInstance 上方发布的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多