ibatis 临时表 怎么定义使用?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ibatis 临时表 怎么定义使用?相关的知识,希望对你有一定的参考价值。
参考技术A ibatis是基于sqlmap的啊,直接写sql语句就完了啊。select * from (select * from student) as a
这个a就是临时表了。本回答被提问者和网友采纳
TSQL 定义临时表(或表变量)而不定义模式?
【中文标题】TSQL 定义临时表(或表变量)而不定义模式?【英文标题】:TSQL Define Temp Table (or table variable) Without Defining Schema? 【发布时间】:2010-10-15 20:26:36 【问题描述】:有没有一种方法可以在不预先定义其架构的情况下定义临时表?
【问题讨论】:
【参考方案1】:是的,您可以使用
创建它SELECT INTO ...
我们说
SELECT * INTO #t
FROM OPENQUERY( 'server',
'exec database.dbo.proc_name value1, value2, ... ' )
【讨论】:
【参考方案2】:您不需要 OPENQUERY。只需将“INTO #AnyTableName”放在选择列表和任何查询的 FROM 之间...
SELECT *
INTO #Temp1
FROM table1
WHERE x=y
【讨论】:
或 Select * into #Temp1 from table1 where 0 = 1 如果您使用此方法,请不要忘记在程序结束时执行drop table #Temp1
【参考方案3】:
实际上使用表 VARIABLE(内存中的表)是最佳方式。 #table 在 temp db 中创建一个表,并且 ##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
注意您插入此临时表的方式。
这样做的缺点是可能需要更长的时间来编写,因为您必须定义表变量。
我还推荐 RedGate 的 SQL Prompt for Query Analyzer。
【讨论】:
但是,表变量必须在编译时而不是运行时定义,对吗?为此,我需要一个动态生成的表格。 呃,但这太冗长了,特别是因为 TSQL 没有“插入或更新”语句...... @BlueRaja-DannyPflughoeft - 您可以使用 MERGE 命令获取“插入或更新”行为。 msdn.microsoft.com/en-us/library/bb522522.aspx 表变量更快因为它们只在内存中的想法似乎是不正确的。根据this Microsoft FAQ 表变量可以存储在 tempdb 中,因为它们可能比内存可以容纳的更大。它的问题/答案#4。 不仅没有回答问题,而且在何时以及为什么使用表变量上错了。 Speedwise,这取决于您将如何查询它,以及它将有多大。没有统计数据。您不能创建二级索引。你不能改变它。也没有回滚。而且范围非常有限。这也带来了它的一些优势。以上是关于ibatis 临时表 怎么定义使用?的主要内容,如果未能解决你的问题,请参考以下文章