我有一个简单的脚本,用于检查第一台服务器上不同名称列中不存在的服务器上的数据库中是否存在数据。我是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)
答案 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
这应该有用。