IF OBJECT_ID('tempdb..#mytesttable') IS NOT NULL
DROP TABLE #mytesttable
SELECT id, name
FROM
INTO #mytesttable mytable
问:当我第一次在过程中创建这个临时表时,检查临时表是否存在(例如:OBJECT_ID('tempdb..#mytesttable') )是好的吗?
性能方面的最佳实践是什么?
我有一个大型查询,从选择into #tmp1开始。在select语句之前,我有以下内容:
USE Sandbox
--if the table exists, we want to delete it first
IF (EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'dbo'
AND TABLE_NAME = '#tmp1'))
BEGIN
drop
我有一个存储的proc来创建一个临时表。只有这个存储的proc的作用域需要它,其他地方都不需要。
当我使用临时表列表时,我总是检查临时表是否存在,如果存在就删除它,然后在存储的proc中创建它。即:
IF OBJECT_ID('tempdb..#task_role_order') IS NOT NULL
DROP TABLE #task_role_order
CREATE TABLE #task_role_order(...)
大多数情况下,除了在创建临时表之前删除临时表之外,在使用临时表时删除临时表是否是最佳实践?
如果需要更多上下文,
首先,我使用的是2012。我试图使用基于字符串值的表,该字符串值作为字符串传入到过程中。我发现在编写查询时不能使用字符串是表名,所以我正在设法解决这个问题。我所关注的唯一线索是使用动态SQL,我也不知道如何使它工作。以下是我所拥有的:
DECLARE @q AS NVARCHAR(MAX)
SET @q = 'SELECT * FROM ' + @tableName
DECLARE #tableCopy AS EXECUTE(@q)
如何将已执行的@q输入#tableCopy?或者,当我只知道表名为字符串时,是否有更好的方法访问我的表?
每当我在中运行这个临时表时,我就会得到“创建临时表的使用需要一个脚本”?
CREATE TEMP TABLE products AS
SELECT product, product_color,
FROM `radiant-oven-328313.customer_data.customer_purchase`
WHERE product = "fan";
这是否意味着我需要将数据插入到表中,还是语法正确??为了插入到我的表中,我尝试了下面的附加代码行:
Select product_color as White_color
FROM products
WHER
嗨,我想合并两个表,但我不确定表是否退出,这是我的查询:
select a from table
union
select case when exists(select a from table1) then (select a from table1)
else (select a from table2) end;
拿着这个
错误:错误4840:用作表达式的子查询返回多行
我需要在子查询中使用限制1,但这不是我想要的结果。
你还有其他建议吗?谢谢
例如,我在本地env中创建了它们,用于测试:
表1
CREATE TABLE public.table1
(
a int
我们知道,在Server中,使用#创建表意味着“本地临时表”,而##则表示“全局临时表”。
但是当我创建一个如下所示的表格:
create table ###MyTable(IntColumn int, ValueColumn varchar(100))
这个表是本地表还是全局临时表?我怎么测试它呢?当我试图通过以下方式进行select时:
Select * from #MyTable -- SQL said it doesn't exists
Select * from ##MyTable -- SQL said it doesn't exists
Select * from
我希望在Mysql中创建一个存储过程,它删除某个临时表(如果存在),然后在数据库‘prs1 1’中创建这个临时表。
我创建的过程是:
CREATE PROCEDURE `CrearTablaTemporal`(table_name VARCHAR(100))
BEGIN
SET @TablaTemporal = table_name;
SET @sql_query1 = CONCAT('DROP temporary table if exists ',@TablaTemporal);
PREPARE stmt1 FROM @sql_query1;
这可能是一个多部分的问题:
当我发布声明的时候
IF OBJECT_ID('temp..#tablename) IS NOT NULL --drop the table here
它不会删除临时表。当我去看临时数据库时,名字是完全不同的.
#tablename___________________________________________00000001069F
显然,drop语句不适用于此。如何确保使用上述语句删除temp表。
另外,如果我在语句之前使用"USE dbName“,那么temp表仍然是在tempdb或dbName数据库中创建的吗?默认总是tempDb吗?
我需要在我的一个存储过程中创建一个临时表。要插入到临时表中的数据是从动态数据透视查询派生的-因此我与动态sql绑定在一起。所以它变成了这个样子-
set query = 'select ....'+ pivotcols +
' into ##temp_table
from base_table
pivot (
max(col1)
for col2 in
(' + pivotcols +'
我使用的是临时表的大容量复制,然后将用于合并到主表。所有操作都正常,但当我尝试删除临时表时,会出现一个错误:“table '#temptable‘不存在”
基本上我做以下几件事。
'get data from excel to a datatable.
Dim cmd As New OleDbCommand(sqlstring, excelConnection)
dt.Load(cmd.ExecuteReader())
'create sql connection
Using sqlcon As SqlCo
方法1:
IF OBJECT_ID('tempdb..#MyTempTbl') IS NOT NULL
DROP TABLE #MyTempTbl;
办法2:
IF EXISTS (SELECT * FROM [tempdb].[sys].[objects]
WHERE [name] = N'#MyTempTbl')
DROP TABLE [#MyTempTbl];
检查和删除临时表的正确方法是什么?
上下文是由代理作业调用的存储过程。
我已经尝试过查询诱饵.系统.对象,并注意到全局临时表的名称与本地临时表相同,其中本地临时表的名称在末尾
我对mysql不是很了解。所以如果这是个愚蠢的问题请原谅。
我今天接到了一个来自我的DBA的电话,我的应用程序创建的临时表数量激增。
但我没有显式地创建任何临时表。
在故障排除后,我们发现每次在子查询中使用文本colomn时,都会创建一个临时表。
作为开发人员,使用子查询和文本列创建临时表使我感到困惑。
我的问题是,作为开发人员,我如何理解查询何时会创建临时表(在后台)。
我做了一些搜索,发现我可以做一些类似的事情
show GLOBAL status like 'created_tmp_disk_tables'
但它告诉我什么呢?如何知道我的查询是否导致了临时表。
使用SELECT ..创建临时表。INTO语句
SELECT *
INTO #MyTempTable
FROM ...
在“数据库”、“临时数据库”、“临时表”下,我看到临时表dbo.#MyTempTable____________________0000000016CA
现在我想丢弃这张表。我尝试了以下几种方法:
DROP TABLE IF EXISTS #MyTempTable
和
IF OBJECT_ID('tempdb..#MyTempTable') IS NOT NULL
BEGIN
DROP TABLE #MyTempTable
END
两者都
我在删除SQL server中的临时表时遇到问题。
我有一个存储过程,但是当我通过我的应用程序运行时,它说:
“数据库中已经有一个名为'#WeekList‘的对象”
当我试图删除该表时,会收到以下消息:
无法删除表“#WeekList”,因为它不存在或您没有权限。
我的计划如下:
USE [test_staff]
GO
/****** Object: StoredProcedure [dbo].[sp_create_week_list] Script Date: 03/20/2012 09:35:42 ******/
SET ANSI_NULLS ON
GO
S