我正在我的存储过程中创建临时表(#temp_table)。这是一个包含大量数据的巨大表。然后我在存储过程中创建索引,因为它需要更快地查询临时表。但是当我执行存储过程时,没有使用索引。执行存储过程时未创建索引。
CREATE PROC abcdefg
AS
...
SELECT col_a, col_b, col_c....
INTO #temp_table
FROM .....
WHERE ....
...
CREATE INDEX abc_idx ON #temp_table (col_a)
...
SELECT col_a FROM #temp_table WITH (INDEX (abc_idx))
...
GO
Run Code Online (Sandbox Code Playgroud)
当我尝试执行存储过程时,它无法识别索引。我该如何解决这个问题?
我正在使用Microsoft SQL Server Management Studio,我正在尝试运行以下查询以将值输入到临时表中以供以后使用:
CREATE TABLE #temptable
(colnumber varchar(15), dispcode varchar(10))
INSERT INTO #temptable (colnumber, dispcode)
VALUES
('col5', '811'),
('col6', '817'),
('col7', '823'),
('col8', '825');
Run Code Online (Sandbox Code Playgroud)
运行时我收到以下错误:
消息102,级别15,状态1,行50
','附近的语法不正确.
哪个指向"('col5','811'),"
谁能帮我在这里找出问题所在?
一般来说,我构建使用 sp_executsql 执行的动态 SQL 语句,如下所示:
EXEC sp_executesql @TempSQLStatement
Run Code Online (Sandbox Code Playgroud)
我需要将返回结果行集插入某些内容(表变量或临时表),但出现以下错误:
Msg 208, Level 16, State 0, Line 1746
Invalid object name '#TempTable'.
Run Code Online (Sandbox Code Playgroud)
执行此操作后:
INSERT INTO #TempTable
EXEC sp_executesql @TempSQLStatement
Run Code Online (Sandbox Code Playgroud)
根据我所读到的内容,我认为问题是由于我没有指定临时表的列而引起的,但我无法执行此操作,因为返回列数有所不同。
我读过我可以使用全局临时表,但我之前已经这样做过,想知道是否还有其他方法可以做到这一点。
我正在尝试创建一个具有游标的函数。我想从该游标中获取Quanatity值并将其放在temp表中。但是我还没有成功获取该值并将其放入temp表中。
我在无法完成的地方发表评论...
这是我的代码
alter FUNCTION test(@input VARCHAR(250)) RETURNS Decimal(8, 2) AS BEGIN
DECLARE @rst Decimal(8, 2) SET @rst=0
DECLARE @Temp TABLE (Quantity Decimal(8,2), Price Decimal(8,2))
DECLARE @amount Decimal(8,2)
DECLARE @price Decimal(8,2)
DECLARE CrsOrfLine CURSOR FOR
SELECT AMOUNT FROM LG_001_01_ORFLINE
WHERE LINETYPE = 0
AND ORDFICHEREF = (SELECT TOP 1 LOGICALREF FROM LG_001_01_ORFICHE WHERE GUID='EEB44E72-3717-4F5B-8F7E-6A36EB38EA22')
ORDER BY LINENO_ ASC;
FETCH NEXT FROM CrsOrfLine INTO @amount
WHILE (@@FETCH_STATUS = 0)
BEGIN
INSERT INTO @Temp (Quantity)
/* HOW AM I SUPPOSED TO ADD …Run Code Online (Sandbox Code Playgroud) 我们知道,在 SQL Server 中,创建一个表的#意思是“本地临时表”,##意思是“全局临时表”。
但是当我创建一个如下表时:
create table ###MyTable(IntColumn int, ValueColumn varchar(100))
Run Code Online (Sandbox Code Playgroud)
该表是本地临时表还是全局临时表?我该如何测试?当我尝试select通过:
Select * from #MyTable -- SQL said it doesn't exists
Select * from ##MyTable -- SQL said it doesn't exists
Select * from ###MyTable -- I get the output
Run Code Online (Sandbox Code Playgroud)
如果第三种情况属实,这是否意味着这是名称为 的通用表###MyTable?我不会像其他所有物理表一样在我的 SSMS 表浏览器中看到这张表吗?
如果我开始在表名前添加多个 #(哈希)会发生什么?
我继承了 SQLQlchemy / SQLSoup 应用程序,需要将其扩展 20 倍。
一个查询运行得非常慢,所以我重构了它。由于MySQL在嵌套子查询/派生表上的性能较差,我将其分成两个临时表并将它们连接起来。
现在我尝试将 SQL 添加到代码中,但是当我尝试访问临时表时,收到一条错误消息,指出该表不存在。
db.execute("""DROP TABLE IF EXISTS next_requests""") ;
db.execute("""
CREATE TEMPORARY TABLE next_requests
(INDEX request_id_index (cirId))
SELECT DISTINCT
cr.uuid AS cirId,
....")
db.execute("SELECT * FROM next_requests")
Run Code Online (Sandbox Code Playgroud)
现在我收到错误:
ProgrammingError: (ProgrammingError) (1146, "Table 'SAST.next_requests' (doesn't exist")
Run Code Online (Sandbox Code Playgroud)
我认为这是因为会话正在关闭并在查询之间重新操作,或者类似的原因。
数据库连接如下。
ENGINE = create_engine(settings.dbString, pool_recycle=1800, pool_size=5)
SESSION = scoped_session(sessionmaker(autoflush=True,\
expire_on_commit=False, autocommit=True))
SQLSOUP_DB = sqlsoup.SQLSoup(ENGINE, session=SESSION)
Run Code Online (Sandbox Code Playgroud)
(SQLSOUP_DB 是 db.execute 中使用的数据库)。
我需要做什么才能保持会话打开,以便我仍然可以使用临时表。或者可能是其他原因导致了这个问题?
如何将临时表(@table)传递给 EXEC sp_executesql @query
set @query = 'SELECT GsName, ' + @cols + ' from
(
select GSName, [THour], NumOfTransactions
from @table
) x
pivot
(
max([NumOfTransactions])
for [THour] in (' + @cols + ')
) p '
Run Code Online (Sandbox Code Playgroud) 我希望将两个表连接到一个临时表中,然后在选择查询中使用临时表。这是我要创建的临时表的选择语句:
select program, event
from OMEGA.HP
inner join POM.GT
on program = substring(name,7,4)
where LENGTH(name)= 25
Run Code Online (Sandbox Code Playgroud)
为上述创建临时表的最简单方法是什么?
我想在单个 BigQuery 查询中创建 3-4 个单独的临时表(所有表都基于不同的数据源),然后在查询中以各种方式加入它们。
我试图通过使用多个 WITH 语句来做到这一点,但如果您不嵌套它们,则似乎只能在查询中使用一个 WITH 语句。每次我尝试时,都会收到一条错误消息,指出需要“SELECT”语句。
我错过了什么吗?如果可能的话,我更愿意在一个查询中完成这一切。
我有一个简单的存储 过程,其中有多个WITH 子句。
一些代码是这样的:
WITH cteRowNums AS
(
SELECT
ROW_NUMBER() OVER(ORDER BY fcmp.EmpUserID, fcmp.WorkCellID, fcmp.ActivityTS) AS RowNumber,
fcmp.ActivityTS,
fcmp.ArtifactTypeID,
fcmp.ServerDateID,
fcmp.ServerHourID,
fcmp.EmpUserID,
fcmp.WorkCellID
FROM dbo.FactCassetteMarkingProcessing fcmp
WHERE ServerDateID >= '2007-01-01'
),
-- Make an attempt at identifying what each user did in their "session" by self-joining
cteJoinCurAndNext AS
(
SELECT
[Current Row].ArtifactTypeID,
[Current Row].ServerDateID,
[Current Row].ServerHourID,
[Current Row].EmpUserID,
[Current Row].WorkCellID
FROM cteRowNums [Current Row]
LEFT OUTER JOIN cteRowNums [Next Row] ON [Next Row].RowNumber = [Current Row].RowNumber …Run Code Online (Sandbox Code Playgroud) temp-tables ×10
sql ×6
sql-server ×5
cursor ×1
exec ×1
inner-join ×1
mysql ×1
nested ×1
python ×1
sqlalchemy ×1
sqlsoup ×1
ssms ×1
ssms-2014 ×1
t-sql ×1