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, ... ' )