Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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 - Fatal编程技术网

使用Sql中的现有表架构声明表变量

使用Sql中的现有表架构声明表变量,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我想使用现有表模式在存储过程中声明一个表变量 我有一个表,比如说TableA,它大约有30列。 我想使用相同的列声明一个表变量,就像我们声明一个临时表一样 比如说,, 我可以使用以下模式声明一个临时表: SELECT TOP 0 * INTO #Temp_TableA FROM TableA 我可以同样地声明一个表变量吗?From: 不,表变量是一个顾名思义的变量,所以您需要先声明它,然后才能像所有其他T-SQL变量一样使用它,并且需要使用INSERT-in DECLARE @MyTable

我想使用现有表模式在存储过程中声明一个表变量

我有一个表,比如说
TableA
,它大约有30列。 我想使用相同的列声明一个表变量,就像我们声明一个临时表一样

比如说,, 我可以使用以下模式声明一个临时表:

SELECT TOP 0 * INTO #Temp_TableA FROM TableA
我可以同样地声明一个表变量吗?

From:
不,表变量是一个顾名思义的变量,所以您需要先声明它,然后才能像所有其他T-SQL变量一样使用它,并且需要使用
INSERT-in

DECLARE @MyTable TABLE(
ID INT NOT NULL,
Data varchar(30) NOT NULL
);
INSERT INTO @MyTable
SELECT ID, data
From <table>

为此,您应使用CTE:

; with CTE as (SELECT TOP 0* FROM TableA)
SELECT * FROM CTE
唯一需要记住的是,CTE只能在初始化后的下一行中使用。例如,下面的方法不起作用-

; with CTE as (SELECT TOP 0* FROM TableA)
SELECT * FROM TableA
SELECT * FROM CTE

因为这里CTE将变得无效。

首先声明一个表变量,该变量与表的模式相同,然后插入到威震天提到的语法中


如果您计划在存储过程中使用,那么请使用CTE,不要忘记提及;点燃CTE declareation并从表中插入CTE变量。

为什么不适合临时表?另请参见
; with CTE as (SELECT TOP 0* FROM TableA)
SELECT * FROM TableA
SELECT * FROM CTE