运行脚本以比较不同服务器上的表之间的数据的问题

时间:2015-07-17 18:20:45

标签: sql-server-2008 sql-server-2012

我有一个简单的脚本,用于检查第一台服务器上不同名称列中不存在的服务器上的数据库中是否存在数据。我是SQL新脚本的新手,我不确定我的问题是什么。我看到两个错误,一个“必须声明表变量”@CaseNum“。”另一个是“多部分标识符”SQLTEST10 \ SQLTEST10.RISK_TEST.dbo.Incident“无法绑定。”

我错过了什么?

Declare @CurrentYear DateTime = YEAR(getdate());
Declare @EventNumber nvarchar(30) = dbo.Details;
Declare @RCaseNum nvarchar(30) = @CurrentYear + @EventNumber;
Declare @CaseNum nvarchar(30) = [SQLTEST10\SQLTEST10].[RISK_TEST].[dbo].[Incident];

Select @EventNumber
From dbo.Details
Where @EventNumber NOT IN
    (Select @RCaseNum
     From @CaseNum)

1 个答案:

答案 0 :(得分:1)

我们无法将表分配给变量。并且由于您要评估EventNumber,因此您必须使用游标,因为变量一次只能包含一个值。这可能不是一个实时解决方案,因为我不知道你的数据是怎样的,但绝对让你继续前进。

声明@EventNumber nvarchar(30)= 2

声明@CurrentYear DateTime = YEAR(getdate())

选择convert(int,@ EventNumber)+ convert(int,@ CurrentYear)

声明@sql nvarchar(2000)

声明@CaseNum nvarchar(30)

从dbo.Details

声明选择EventNumber的cur光标

打开cur

从cur获取下一个@EventNumber

while(@@ FETCH_STATUS = 0)

开始

从[RISK_TEST]设置@sql = N'选择@CaseNum = CaseNumber。[dbo]。[事件]

CaseNumber!='+ @EventNumber +''

exec sp_executesql @SQL,N'@ casenum int out',@ casenum out

从cur获取下一个@EventNumber

close cur

deallocate cur

这应该有用。