我正在使用 SQL Server。我的问题是,我可以创建一个临时表而不定义它的列吗?还是有一种动态的方式来创建一个临时表SELECT Column1, Column2 FROM DBO.TBLDATACOPY
?
目标是创建一个临时表来存储SELECT Column1, Column2 FROM DBO.TBLDATACOPY
使用 a 执行的 a 返回的数据EXECUTE sp_executesql
。我不能执行以下操作,SELECT * INTO #TBCOPY FROM (SELECT *FROM DBO.TBLDATACOPY)
因为表#TBCOPY
在sp_executesql
.
如果您只需要使用 SELECT INTO:
运行此示例并告诉我它是否接近您的需要,显然使其动态化不是一种选择。
根据我的口味,有一种相当复杂的方法,我会向你解释。
通常当我们想动态创建一个临时表而不必定义第
CREATE
一个时,我们要做的是:不可能对 SP 的结果做同样的事情,我们可以做 a
INSERT INTO
,但显然为此,我们必须知道结构并首先创建表。另一种方法是通过一个OPENROWSET
以某种方式模拟带有结果的表的方法来传递 SP 的执行,但要做到这一点,我们的 SQL Server 必须有一个特殊的配置,所以首先要像这样重新配置它:如果我们有可能维护这个配置,那么我们可以这样做:
显然要酌情修改连接dsn,在这个例子中我们使用集成安全,但用户/密码可以配置。这有其缺点,dsn 明文,使用 OPENROWSET 的开销等。如果可以忍受这些缺点,这可能是一种有效的选择。
您是否使用任何 SP(存储过程)?如果是这样,请按照惯例使用您的 SELECT INTO,不带初始 #(数字),它将创建表,并根据需要使用它,也就是说,在 SP 结束之前将其删除。如果没有,请确定在您的过程中删除它的机制,这样您就不会无限期地保留表格。
您可以通过以下方式执行此操作:
通过这种方式,您可以定义要在临时表中包含的列,也就是说,如果您希望它包含物理表的所有列或仅包含一些特定列,您还可以过滤数据,因为您可以添加WHERE 除了与其他表进行联接之外
CTE 可以为您服务