Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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
除验证外的TSQl_Tsql_Sql Server 2008_Validation_Except - Fatal编程技术网

除验证外的TSQl

除验证外的TSQl,tsql,sql-server-2008,validation,except,Tsql,Sql Server 2008,Validation,Except,您好,我正在用TSQL编写一个长程序,它从一个旧的(而且非常脏的)数据集中提取数据,并重新格式化输出,包括列标题以匹配新的数据集。新表和旧表中都有130列。为了测试的目的,我从每一行引入了10万行。为了验证表结构和字段属性是否相同,我的老板要求我使用TSQL。我进入我们的2008服务器,从新表2005数据和2008旧存档数据中提取数据 我使用的代码如下: SELECT * FROM #NEW_TABLE EXCEPT SELECT * FROM #OLD_TABLE EXCEPT语句输出新表中

您好,我正在用TSQL编写一个长程序,它从一个旧的(而且非常脏的)数据集中提取数据,并重新格式化输出,包括列标题以匹配新的数据集。新表和旧表中都有130列。为了测试的目的,我从每一行引入了10万行。为了验证表结构和字段属性是否相同,我的老板要求我使用TSQL。我进入我们的2008服务器,从新表2005数据和2008旧存档数据中提取数据

我使用的代码如下:

SELECT * FROM #NEW_TABLE
EXCEPT
SELECT * FROM #OLD_TABLE

EXCEPT语句输出新表中的所有100k记录。这是因为数据中没有匹配,而不是表结构问题,因为我没有收到任何错误

是-据我所知,您会得到新表中的所有记录,因为它们都与旧表中的记录不匹配(除此之外)

这是正确的,但这取决于您所说的“匹配”是什么意思

为了使EXCEPT工作,两个表中的所有列都必须匹配,才能将其从结果集中删除。这意味着,如果你有一些东西看起来像:

ID  Name   Salary
--- ------ ------
1   John   550k
2   Sue    500k
3   Bill   40k
除以下情况外,您还可以使用:

ID  Name   Salary
--- ------ ------
1   John   520k
您仍将看到以下内容作为您的输出:

ID  Name   Salary
--- ------ ------
1   John   550k
2   Sue    500k
3   Bill   40k

我的意思是匹配,就像在表结构中一样,字段顺序和字段属性都是相同的,而不是数据本身。您应该从引用这两个表的sys.columns中进行选择,并对这些结果执行EXCEPT。如果列的数量不匹配,它甚至不起作用,但它不能告诉你更多。