Sql 为什么“受影响的行数”在普通选择和选择到之间有所不同?
我有一个查询,如下所示:Sql 为什么“受影响的行数”在普通选择和选择到之间有所不同?,sql,sql-server,tsql,ssms,Sql,Sql Server,Tsql,Ssms,我有一个查询,如下所示: SELECT OBJECT_SCHEMA_NAME(T.[object_id],DB_ID()) AS [Schema] ,T.[name] AS [Table], AC.[name] AS [Column] ,TY.[name] AS [Data Type] ,sep.[value] AS [Description] ,AC.[max_length] AS [Maximum Field Length] ,create
SELECT
OBJECT_SCHEMA_NAME(T.[object_id],DB_ID()) AS [Schema]
,T.[name] AS [Table], AC.[name] AS [Column]
,TY.[name] AS [Data Type]
,sep.[value] AS [Description]
,AC.[max_length] AS [Maximum Field Length]
,create_date AS [Date Created]
,modify_date AS [Date Modified]
,CASE WHEN is_identity = 1 THEN 'Yes' ELSE 'No' END AS [Primary Key]
,CASE WHEN AC.[is_nullable] = 1 THEN 'Yes' ELSE 'No' END AS [Allows Nulls]
-- INTO
-- tmp_desc
FROM sys.[tables] AS T
INNER JOIN sys.[all_columns] AC ON T.[object_id] = AC.[object_id]
INNER JOIN sys.[types] TY ON AC.[system_type_id] = TY.[system_type_id] AND AC.[user_type_id] = TY.[user_type_id]
left join sys.extended_properties sep on t.object_id = sep.major_id
and ac.column_id = sep.minor_id
and sep.name = 'MS_Description'
WHERE
T.[is_ms_shipped] = 0
…列出我的表和字段中的某些属性
当我执行以下步骤时,会发生一些奇怪的事情:
我运行SELECT,没有创建临时表,但我运行了一个drop表,以防返回1018条记录
我在上面的代码中运行SELECT取消对它的注释:1028条记录受影响
我再次注释出INTO,不要删除temp表,只选择:返回1028条记录
我运行“select*from tmp_desc”:返回1028条记录
我删除临时表并再次运行SELECT ONLY:返回1018条记录
创建临时表的任何想法都会影响查询返回的行,如果tmp_desc不是来自查询的一部分?存储在tmp_desc中的数据包括其自身的详细信息;显然,如果只运行SELECT而不运行INTO,则不会。因此,在运行纯SELECT之后,您可以为INTO多获得10行,因为tmp_desc表中有10列
如果希望查询相同,请使用INTO从查询中排除tmp_desc:
选择S.[name]作为[Schema],
T.[name]作为[表],
AC.[名称]作为[列],
TY.[name]作为[数据类型],
sep[值]作为[说明],
AC.[max_length]作为[Maximum Field length],
将_日期创建为[创建日期],
将_日期修改为[修改日期],
当is_identity=1时,则“是”或“否”结束为[主键],
当AC.[is_nullable]=1时,则“是”或“否”结束为[允许为空]
进入tmp_desc
从sys.S
内部联接系统。[tables]T在S.schema\u id=T.schema\u id上
内部联接系统[T.[object\u id]=AC.[object\u id]上的[all\u columns]AC
AC上的内部联接系统。[types]TY。[system\U type\U id]=TY。[system\U type\U id]
和AC.[user\u type\u id]=TY.[user\u type\u id]
左连接sys.extended\u properties sep ON T.object\u id=sep.major\u id
和AC.column\u id=sep.minor\u id
而sep.name='MS_Description'
其中T.[is\u ms\u shipped]=0
和NOTS.[name]=N'dbo'和T.[name]=tmp_desc';