我正在尝试编写一个存储过程,将Excel文件读入临时表,然后按下该表中的一些数据,然后将该表中的选定行插入永久表.
所以,它是这样开始的:
SET @SQL = "select * into #mytemptable FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database="+@file+";HDR=YES', 'SELECT * FROM [Sheet1$]')"
EXEC (@SQL)
Run Code Online (Sandbox Code Playgroud)
这似乎有用.
但是,如果我尝试这样的事情:
Select * from #mytemptable
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
无效的对象名称'#mytemptable'
为什么#mytemptable不被认可?有没有办法让#mytemptable可以访问存储过程的其余部分?
提前谢谢了!
是否有快速/有效的方法来检查表是否为空?
DECLARE @StartEndTimes TABLE
(
id bigint,
StartTime datetime,
EndTime datetime
)
IF @StartEndTimes IS NOT NULL
Run Code Online (Sandbox Code Playgroud) 假设我在存储过程中使用以下Oracle代码:
CREATE GLOBAL TEMPORARY TABLE temp_table (
field1 NUMBER,
field2 NUMBER
)
ON COMMIT DELETE ROWS
Run Code Online (Sandbox Code Playgroud)
可以在任何单个时刻由不同用户同时调用该特定存储过程.据我了解,临时表中用户可见的数据对他或她来说是私有的,这些行在COMMIT上被删除.
但是,以下如何处理此问题:
每次调用存储过程时调用CREATE语句是否安全?这会导致错误导致已经存在"可能"由不同用户(/会话)创建的临时表吗?或者这样可以,因为服务器无论如何都会私下对待它们?
ON COMMIT DELETE ROWS究竟发生了什么?我假设这只删除了特定用户会话的特定行,让其他会话的数据保持不受干扰,对吗?
任何帮助,将不胜感激.:)
有没有办法在将值保存到临时表时更改(增加)列的数据类型?
SELECT TableA.ID_NO, sum(TABLEA.COST * TABLEB.QTY) as TOTAL
INTO #matCalc
FROM TABLEA A
INNER JOIN TABLEB
ON A.ID_NO = B.ID_NO
Run Code Online (Sandbox Code Playgroud)
我们在实际查询中有更大的计算.当我们执行存储过程时,我们得到一个错误"算术溢出错误,将数字转换为数据类型数字".
非常感谢任何解决方案.
谢谢.
如何为从SELECT语句创建的临时表定义键?
我有:
CREATE temporary TABLE _temp_unique_parts_trading
engine=memory AS
(SELECT parts_trading.enquiryref,
sellingcurrency,
jobs.id AS jobID
FROM parts_trading,
jobs
WHERE jobs.enquiryref = parts_trading.enquiryref
GROUP BY parts_trading.enquiryref)
Run Code Online (Sandbox Code Playgroud)
但是我在哪里定义键?
我们在升级到SQL Server 2012时遇到问题.我使用以下脚本创建过去在SQL Server 2008 R2上运行良好的临时表,但现在它在2012年生成错误:
if (OBJECT_ID( 'tempdb..#idstable') > 0)
truncate table #idstable
else
create table #idstable (id int not null)
Run Code Online (Sandbox Code Playgroud)
抛出的错误是
数据库中已经有一个名为"#idstable"的对象.
这显然不是我第一次使用脚本时抛出的(在同一个事务中).
任何的想法?谢谢!
这是我用来重现问题的表定义:
create table test_sum_type
(
kind char(1) not null,
n tinyint not null
);
Run Code Online (Sandbox Code Playgroud)
测试数据:
+------+---+
| kind | n |
+------+---+
| A | 1 |
| B | 1 |
| A | 2 |
+------+---+
Run Code Online (Sandbox Code Playgroud)
查询使用MySQLdb:
In [32]: cur.execute("select kind, sum(n) from test_sum_type group by kind")
Out[32]: 2L
In [33]: cur.fetchall()
Out[33]: (('A', Decimal('3')), ('B', Decimal('1')))
In [34]: cur.execute("select kind, n from test_sum_type")
Out[34]: 3L
In [35]: cur.fetchall()
Out[35]: (('A', 1), ('B', 1), ('A', 2)) …Run Code Online (Sandbox Code Playgroud) 基于SQL临时表的教程,应该可以通过使用创建临时表,SELECT * INTO #tempTable FROM tableA但是SQLException当我试图SELECT * FROM #tempTable说出来时它会抛弃我Invalid object name '#tempTable'.我可以知道使用临时表的正确方法是C#什么?
string sql = "SELECT * INTO ##tempTable FROM (SELECT * FROM tableA)";
using (var command = new SqlCommand(sql, connection))
{
string sqlNew = "SELECT * FROM ##tempTable";
using (var command2 = new SqlCommand(sqlNew, connection))
{
using (var reader = command2.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine(reader["column1"].ToString());
}
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的目标是尝试使用从中检索的数据sqlVar并将它们插入到tempTable中并对其执行一些操作.非常感谢如果有一些示例代码如何使代码适合上述代码.谢谢.
我有类似的东西
if object_id('tempdb.#TempHourlyTable') is not null
drop table #TempHourlyTable
select * into #TempHourlyTable
from (
select top 10 * from customers
)
Run Code Online (Sandbox Code Playgroud)
我收到这样的错误:
')'附近的语法不正确.
我第一次尝试使用临时表.那么这里的错误是什么?
编辑:
删除并重新创建临时表是否存在.得到错误
消息2714,级别16,状态6,行55
在数据库中已经有一个名为"#TempHourlyTable"的对象.
我在一个脚本中多次删除/创建一个临时表
IF OBJECT_ID('tempdb..#uDims') IS NOT NULL
DROP TABLE #uDims
select * into #uDims from table1
.... do something else
IF OBJECT_ID('tempdb..#uDims') IS NOT NULL
DROP TABLE #uDims
select * into #uDims from table2 -- >> I get error here
.... do something else
IF OBJECT_ID('tempdb..#uDims') IS NOT NULL
DROP TABLE #uDims
select * into #uDims from table3 -- >> and here
.... do something else
Run Code Online (Sandbox Code Playgroud)
当我试图运行脚本时,我得到了
There is already an object named '#uDims' in the database.
Run Code Online (Sandbox Code Playgroud)
在第二和第三"选择进入......"
这显然是一个编译时错误.如果我逐节运行脚本,那么每件事都会运行良好.
这个问题有很多解决方法,但我想知道为什么SSMS对此感到不安.
temp-tables ×10
sql-server ×5
sql ×3
mysql ×2
c# ×1
mysql-python ×1
openrowset ×1
oracle ×1
python ×1
ssms ×1
subquery ×1
t-sql ×1