Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较两个表并返回数据不同的列的sql存储过程_Sql_Sql Server_Stored Procedures - Fatal编程技术网

比较两个表并返回数据不同的列的sql存储过程

比较两个表并返回数据不同的列的sql存储过程,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,需要有关sql sp的帮助。我将使用两个表名从vbscript调用此sp table1 id f-name l_name phone 1 john smith 111-111-1111 2 john doe 222-222-2222 3 peter Wu 333-333-3333 4 peter Wang 444-444-4444 table2 id f-name l_name phone 1 john smith 123-456-1

需要有关sql sp的帮助。我将使用两个表名从vbscript调用此sp

table1
id  f-name l_name phone
1   john   smith  111-111-1111
2   john   doe    222-222-2222
3   peter  Wu     333-333-3333
4   peter  Wang   444-444-4444
table2
id  f-name l_name phone
1   john   smith  123-456-1111
2   john   doe    234-222-2222
3   peter  Wu     345-454-3333
4   peter  Wang   456-444-4444
存储过程first应该从两个表中获得top 1*,并且应该比较表1和表2中的第一行,如果数据不相同,则返回所有列名,这里存储过程应该返回列phone。
我对sql很幼稚,需要帮助才能编写此存储过程。

关于top 1,我假设您指的是id:


我看不出这个存储过程有多大用处。我的猜测是,比较两个表时,您会遇到一个更复杂的问题。如果是这样,您应该问另一个问题。

您使用的是哪种DBMS产品?博士后?神谕SQL是一种查询语言,而不是特定数据库产品的名称。比较两个表通常是在主键列上使用完整的外部联接,然后对每列使用大小写来检查它们是否相等。为什么需要存储过程来实现此???SQL Server。我在谷歌上搜索并找到了完整的外部连接,但在我的情况下,即使主键也可能不同,因此无法基于主键进行连接。这些表中的任何列数据都可能不同。嗨,Eric,我计划从代码中调用此sp,并将表名作为参数传递给存储过程。我听说select top 1*不会从两个表返回同一行。这是真的吗?你是对的,它比那复杂。我是说那张桌子的第一排。我正在尝试创建一个具有相同模式的临时表,并向其中添加自动增量列,这样可能会很容易。
select ( (case when t1.fname <> t2.fname then 'fname;' else '' end) +
         (case when t1.lname <> t2.lname then 'lname;' else '' end) +
         (case when t1.phone <> t2.phone then 'phone;' else '' end)
       ) as diff_columns
from (select top (1) t1.*
      from table1 t1
      order by id
     ) cross join
     (select top (1) t2.*
      from table2 t2
      order by id
     ) ;