Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 server 两个不同SQL Server 2008 R2上嵌套查询的不同行为_Sql Server_Sql Server 2008 R2_Nested_Aliasing - Fatal编程技术网

Sql server 两个不同SQL Server 2008 R2上嵌套查询的不同行为

Sql server 两个不同SQL Server 2008 R2上嵌套查询的不同行为,sql-server,sql-server-2008-r2,nested,aliasing,Sql Server,Sql Server 2008 R2,Nested,Aliasing,以下查询在SQL Server 2008 R2的两个实例上返回两个不同的结果: create table a(id int) insert into a(id) values(1) insert into a(id) values(2) select id, (select count(dbo.a.id) from dbo.a where dbo.a.id = "a"."id") from a where a.id = 1 第一台机器发出声音 id -

以下查询在SQL Server 2008 R2的两个实例上返回两个不同的结果:

create table a(id int)

insert into a(id)
values(1)

insert into a(id)
values(2)

select 
   id,
   (select count(dbo.a.id) from dbo.a where dbo.a.id = "a"."id")
from a 
where a.id = 1
第一台机器发出声音

id          
----------- -----------
1           2
id          
----------- -----------
1           1
第二台机器给出

id          
----------- -----------
1           2
id          
----------- -----------
1           1
我们知道如何通过在子查询中使用显式别名来解决此问题。但是因为我们经常使用这样的结构,这将是一项巨大的工作。所以我们想了解这个问题

SQL Server中是否有控制此行为的选项

2013/07/22:

DBCC用户选项;选择@版本;给予

Set Option                    Value
----------------------------- ----------------
textsize                      2147483647
language                      Deutsch
dateformat                    dmy
datefirst                     1
lock_timeout                  -1
quoted_identifier             SET
arithabort                    SET
ansi_null_dflt_on             SET
ansi_warnings                 SET
ansi_padding                  SET
ansi_nulls                    SET
concat_null_yields_null       SET
isolation level               read committed
------------------------------------
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86)
        Jun 17 2011 00:57:23
        Copyright (c) Microsoft Corporation

        Enterprise Edition on Windows NT 6.0 <X86> (Build 6002: Service Pack 2)
第一个数据库提供:

id
-----------
1
2

(2 Zeile(n) betroffen)

id          
----------- -----------
1           2

(1 Zeile(n) betroffen)

CurrentUser
--------------------------
dbo

(1 Zeile(n) betroffen)

CurrentSchema
--------------------------
dbo

(1 Zeile(n) betroffen)
id
-----------
1
2

(2 Zeile(n) betroffen)

id          
----------- -----------
1           1

(1 Zeile(n) betroffen)

CurrentUser
-----------------------
dbo

(1 Zeile(n) betroffen)

CurrentSchema
-----------------------
dbo

(1 Zeile(n) betroffen)
第二个数据库提供:

id
-----------
1
2

(2 Zeile(n) betroffen)

id          
----------- -----------
1           2

(1 Zeile(n) betroffen)

CurrentUser
--------------------------
dbo

(1 Zeile(n) betroffen)

CurrentSchema
--------------------------
dbo

(1 Zeile(n) betroffen)
id
-----------
1
2

(2 Zeile(n) betroffen)

id          
----------- -----------
1           1

(1 Zeile(n) betroffen)

CurrentUser
-----------------------
dbo

(1 Zeile(n) betroffen)

CurrentSchema
-----------------------
dbo

(1 Zeile(n) betroffen)

最简单的解释可能是那些
a
表有不同的行

否则,我无法重现这个问题。引用没有显式模式的对象的查询(例如,从中选择*)可以在同一服务器上提供不同的结果,如果

1) 该查询由不同的用户执行

2) 用户被映射到不同的模式(例如dbo和dbo2)

3) 在不同的模式中有两个(或更多)具有相同名称的表/对象(例如:
dbo.A
dbo2.A

在选择了
SQLCMD模式的SSMS中运行此脚本(菜单:Query>SQLCMD模式):

结果:

Connecting to (local)\SQL2008R2 as login_test_1...
CurrentUser
--------------------------------------------------------------------------------------------------------------------------------
user_test_1
CurrentSchema
--------------------------------------------------------------------------------------------------------------------------------
dbo
ID
-----------
1
Disconnecting connection from (local)\SQL2008R2 as login_test_1...

Connecting to (local)\SQL2008R2 as login_test_2...
CurrentUser
--------------------------------------------------------------------------------------------------------------------------------
user_test_2
CurrentSchema
--------------------------------------------------------------------------------------------------------------------------------
dbo2
ID
-----------
1
2
Disconnecting connection from (local)\SQL2008R2 as login_test_2...
在这种情况下,login_test_1(dbo)得到1行,而login_test_2(dbo2)得到2

清理脚本:

/*
DROP DATABASE Test;
DROP LOGIN login_test_1;
DROP LOGIN login_test_2;
GO
*/

运行
dbccuseroptions;选择@版本并发布结果。这()是这种情况下(子查询)的预期行为。尝试在两个数据库上运行此查询
SELECT*FROM sys.databases d,其中d.database_id=DB_id()
,并比较结果。如果你发现了什么,请告诉我。也许[这个]会对你有帮助。