我已完成教程中的所有操作:
CREATE PROCEDURE dbo.checkDiff
@table1 NVARCHAR(50),
@table2 NVARCHAR(50)
AS
SELECT *
FROM @table1
EXCEPT
SELECT *
FROM @table2
UNION ALL
SELECT *
FROM @table2
EXCEPT
SELECT *
FROM @table1
go
但我收到了一些错误:
Msg 1087,Level 16 State 1,Procedure checkDiff,Line 3 [Batch Start Line 25]
必须声明表变量“@ table1”。
(同样的错误,多次重复)
答案 0 :(得分:3)
此程序应该适合您。它不起作用的原因是由于上面留下的评论。
CREATE PROCEDURE dbo.checkDiff (
@table1 nvarchar(50),
@table2 nvarchar(50)
)
AS
Declare @SQL nvarchar(max)
SET @SQL = 'select * from ' + QUOTENAME(@table1) + ' except select * from ' + QUOTENAME(@table2) + '
union all
select * from ' + QUOTENAME(@table2) + ' except select * from ' + QUOTENAME(@table1)
-- PRINT @SQL
exec sp_executesql @SQL
go
请注意,这是比较两个表中数据的一种非常糟糕的方法。两个表中的每一个都需要具有完全相同的列数才能正常工作,否则联合将失败。