Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/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
Sql 临时表列大小在确定了多少行之后?_Sql_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

Sql 临时表列大小在确定了多少行之后?

Sql 临时表列大小在确定了多少行之后?,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,临时表列大小在确定了多少行之后 例如,假设以下查询返回10000行: select Name, LastName, Resume into #temp from Employee Employee表中的所有三列都是varchar,但是Employee.Resume(varchar(500))的范围从20个字符到400个字符。如果我在没有INTO子句的情况下运行该查询,我将看到较长的Employee.Resume值几乎位于10000行的末尾 当将结果转入临时表时,IN子句是否考虑整个结果集?还是

临时表列大小在确定了多少行之后

例如,假设以下查询返回10000行:

select Name, LastName, Resume into #temp from Employee
Employee表中的所有三列都是varchar,但是Employee.Resume(varchar(500))的范围从20个字符到400个字符。如果我在没有
INTO
子句的情况下运行该查询,我将看到较长的Employee.Resume值几乎位于10000行的末尾

当将结果转入临时表时,IN子句是否考虑整个结果集?还是使用前X行来确定大小?或者它只是从原始表“继承”列大小

我几乎可以肯定它复制了原始列的大小,因为我查询了
tempdb.sys.columns
,但我只是想检查一下


谢谢。

它复制原始列的数据类型。它不尝试对数据长度或精度进行任何平均。但是,与
FILESTREAM
(转换为
VARBINARY(MAX)
)和
IDENTITY
列(有时不保留)相关的一些例外情况

发件人:

新_表的格式是通过计算选择列表中的表达式来确定的。新_表中的列是按照选择列表指定的顺序创建的。新_表中的每一列与选择列表中的相应表达式具有相同的名称、数据类型、可空性和值。除非在备注部分的“使用标识列”中定义的条件下,否则将转移列的标识属性

数据类型

FILESTREAM属性不会传输到新表。FILESTREAM blob被复制并作为varbinary(max)blob存储在新表中。如果没有FILESTREAM属性,varbinary(max)数据类型的限制为2 GB。如果FILESTREAM BLOB超过此值,将引发错误7119并停止该语句

将现有标识列选择到新表中时,新列将继承标识属性,除非满足以下条件之一:

  • SELECT语句包含一个联接

  • 多个SELECT语句通过UNION连接

  • 标识列在选择列表中多次列出

  • 标识列是表达式的一部分

  • 标识列来自远程数据源

如果这些条件中的任何一个为true,则创建的列不是NULL 继承标识属性的方法。如果新表中需要标识列,但该列不可用,或者您想要一个不同于源标识列的种子值或增量值,请使用identity函数在选择列表中定义该列。请参见下面示例部分中的“使用标识函数创建标识列”


如Microsoft网站上关于
进入
条款所述:

新_表的格式是通过计算中的表达式来确定的 选择列表。新_表中的列按顺序创建 由选择列表指定。新_表中的每列都具有相同的 名称、数据类型、可空性和值作为相应的 选择列表中的表达式


在您的特定实例中,数据类型将是底层列的任何数据类型(在本例中为
VARCHAR(500)
)。如果要在列中附加另一个字符串,例如
'RESUME:'+E.RESUME
,则SQL Server可能会根据其表达式数据类型的常规规则更改数据类型。您也可以在Microsoft网站上找到这些规则。

数据类型的确定与
into
子句无关。我认为SQL Server在这种情况下只会使用输入列的大小来表示类型,而文档是错误的,因为列的大小不是通过计算表达式来确定的。