TSQL定义临时表(或表variables)没有定义架构?

有没有一种方法来定义临时表,而无需事先定义它的模式?

实际上,使用一个表VARIABLE是一个内存表,是最佳的select。 #table在临时数据库中创build一个表,并且## table是全局的 – 都使用磁盘命中。 考虑交易数量下降的速度。

CREATE PROCEDURE [dbo].[GetAccounts] @AccountID BIGINT, @Result INT OUT, @ErrorMessage VARCHAR(255) OUT AS BEGIN SET NOCOUNT ON; SET @Result = 0 SET @ErrorMessage = '' DECLARE @tmp_Accounts TABLE ( AccountId BIGINT, AccountName VARCHAR(50), ... ) INSERT INTO @tmp_Accounts ([AccountId], [AccountName]... ) SELECT AccountID, AccountName FROM Accounts WHERE ... IF @@Rowcount = 0 BEGIN SET @ErrorMessage = 'No accounts found.' SET @Result = 0 RETURN @Result END ELSE BEGIN SET @Result = 1 SELECT * FROM @tmp_Accounts END 

注意你插入这个临时表的方式。

这样做的缺点是可能需要更长的时间来编写,因为你必须定义你的表variables。

我也推荐RedGate的SQL提示查询分析器。

你不需要OPENQUERY。 只要在select列表和任何查询的FROM之间放入“INTO #AnyTableName”…

 SELECT * INTO #Temp1 FROM table1 WHERE x=y 

是的,你可以用它来创build它

 SELECT INTO ... 

我们说

 SELECT * INTO #t FROM OPENQUERY( 'server', 'exec database.dbo.proc_name value1, value2, ... ' )