我有一个存储过程,结果如下:
Governors AUTO 07313570121 1 3.69 2.01 2.01 1.68 83.58%
Governors AUTO 07319354850 1 2.79 1.8 1.80 0.99 55.00%
Governors AUTO 07480400400 1 17.69 9.71 9.7117 7.9783 82.15%
Governors AUTO 07723100038 1 2.89 1.55 1.55 1.34 86.45%
Governors BEER 01820000031 6 4.69 23.34 3.888 0.8 20.57%
Governors BEER 01820000051 6 4.69 23.34 3.888 0.802 20.63%
Governors BEER 01820000106 1 6.39 4.93 4.93 1.46 29.61%
Run Code Online (Sandbox Code Playgroud)
我想总结一下:
Governors AUTO 4 27.06 15.07
Governors AUTO 13 13.07 51.61
Run Code Online (Sandbox Code Playgroud) 我正在努力完成这里描述的内容:
http://sqldev.wordpress.com/2008/05/06/insert-into-temporary-table-from-stored-procedure/
文章说(通过评论支持)这适用于SQL Server 2000但可能不那么容易.
这在2008年之前有点棘手 - 事实证明,在SQL Server 2008中,这可以轻松完成.
和评论说:
这不是2008年的特色.它是在那里,因为我记得...从SQL Server 2000?无论如何,这是一个很棒的功能!
如何快速完成SQL Server 2000的此操作?
使用文章所基于的代码,我收到以下错误消息:
Msg 197, Level 15, State 1, Line 7
EXECUTE cannot be used as a source when inserting into a table variable.
Run Code Online (Sandbox Code Playgroud)
我确实找到了这个Stackoverflow帖子,它也支持这个可以在SQL Server 2000中完成的概念,但是这篇文章是为了解决SQL Server 2005而且它没有进入2000多.
我正在使用一个在SQL Server 2005上运行良好的Openquey,我有一台服务器是SQL Server 2008,但这不起作用.
如果我运行以下内容:
SELECT *
FROM OPENQUERY([Manchester],
'[Manchester].[PilotWebApp].[DBO].rsp_HandheldPerformance ''10/01/2009'',
''10/10/2009''')
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Cannot process the object "[Manchester].[PilotWebApp].[DBO].rsp_HandheldPerformance '10/01/2009', '10/10/2009'".
The OLE DB provider "SQLNCLI" for linked server "Manchester" indicates that either the object has no columns or the current user does not have permissions on that object.
Run Code Online (Sandbox Code Playgroud)
如果我只是运行:
[Manchester].[PilotWebApp].[DBO].rsp_HandheldPerformance '10/01/2009', '10/10/2009'
Run Code Online (Sandbox Code Playgroud)
它工作正常.2008年发生了什么变化?
它的作用是从openquery获取数据并插入到我的临时表中:
INSERT #TempHandheldPerformance SELECT * FROM OPENQUERY([Manchester], '[Manchester].PilotWebApp.DBO.rsp_HandheldPerformance ''10/01/2009'', ''10/10/2009''')
Run Code Online (Sandbox Code Playgroud) 我在SQL中有一个存储过程,我无法更改.它需要很少的输入参数,并返回一个包含100多行和多列的表.
exec dbo.Select_Data 0, 0, 18, 50
Run Code Online (Sandbox Code Playgroud)
我需要一些东西来计算返回的行:
select count(*) from (exec dbo.Select_Data 0, 0, 18, 50)
Run Code Online (Sandbox Code Playgroud)
以及从名称列中获取值的方法:
select Id, Name from (exec dbo.Select_Data 0, 0, 18, 50) where Id=10
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
我的存储过程返回两个输出.我想在另一个存储过程中使用其中一个.所以试图在临时表中获取第二个输出.但由于两个输出的结构不同,因此我总是得到"列名或提供的值的数量与表定义不匹配".
即使我改变输出的顺序(第一个输出第二个和第二个输出第一个),它也不起作用.
我正在建立一个全新的应用程序,我需要再次在另一个存储过程中使用存储过程.如果我遇到这种情况,我可能需要重写很多代码.
有一个非常好的问题,但这只涵盖一个输出.
谢谢
一般来说,我构建使用 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)
根据我所读到的内容,我认为问题是由于我没有指定临时表的列而引起的,但我无法执行此操作,因为返回列数有所不同。
我读过我可以使用全局临时表,但我之前已经这样做过,想知道是否还有其他方法可以做到这一点。
这可能有一个简单的答案,但我无法弄清楚,因为我仍然掌握在 SQL Server 中使用 R 的窍门。我有一段代码从 SQL Server 表中读取数据,在 R 中执行并返回一个数据框。
execute sp_execute_external_script
@language=N'R',
@script=N'inp_dat=InputDataSet
inp_dat$NewCol=max(inp_dat$col1,inp_dat$col2)
new_dat=inp_dat
OutputDataSet=new_dat'
@input_data_1=N'select * from IM_COMP_TEST_SQL2016.dbo.temp_table';
Run Code Online (Sandbox Code Playgroud)
我想将 new_dat 插入 SQL Server 表 ( select * into new_table from new_dat
)。我该怎么做?
我有一个返回列的存储过程.出于功能原因,该存储过程主要由其他查询使用
所以我的存储过程:
IF OBJECT_ID ( 'dbo.ProcDim', 'P' ) IS NOT NULL
DROP PROCEDURE dbo.ProcDim;
GO
CREATE PROCEDURE dbo.ProcDim
@Dim1 nvarchar(50),
@Dim2 nvarchar(50)
AS
SET NOCOUNT ON;
IF OBJECT_ID('tempdb..#TMP1') IS NOT NULL
DROP TABLE #TMP1
SELECT
INTO #TMP1
FROM DBase.dbo.Table1 AS Parameter
WHERE Parameter.Dim1 = @Dim1
AND Parameter.Dim2 = @Dim2;
GO
EXECUTE dbo.ProcDim N'value1', N'value2';
SELECT * from #TMP1
Run Code Online (Sandbox Code Playgroud)
所以当我执行我的程序没有#TMP1工作正常但我想将结果插入临时表
我有此动态查询,如何将其结果插入到临时表中?该查询的结果显示为,(1000 row(s) affected)
但是有没有机会将这1000行转储到临时表中?
像这样:
INSERT INTO #TempTable
EXEC(@query)
Run Code Online (Sandbox Code Playgroud)
这是我的查询
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SET @cols = STUFF((SELECT ',' + QUOTENAME(c.locationCode)
FROM Catalytic_vw_LocationCodeByLine c WHERE c.linename ='wind' order by c.CompanyName, c.LocationCode
FOR XML PATH('')),1,1,'')
set @query =
'select * into ##Temp
from
(SELECT QUOTEGUID as qguid, ' + @cols + ' from
(
select
QuoteGUID,
LocationCode,
LineName,
LineGUID
from Catalytic_vw_PolicyLocationCode
) x
pivot
(
max(locationCode)
for locationCode in (' + @cols + ')
)p)x'
EXEC sp_executesql …
Run Code Online (Sandbox Code Playgroud) 如何在没有命令参数的情况下在插入语句内调用函数/过程。例如
Insert into myTable (....) values (1,2,mySP_or_mySDF, 3,4)
Run Code Online (Sandbox Code Playgroud) 我在运行 Windows 7 x-64 的独立非联网开发 PC 上安装了 SQL Server 2012 完整版。假设 FOO 是我的 PC 的名称,而我的 SQL Server 命名实例是 FOO\SQL2012。
我正在尝试按照此处的示例进行操作,这些示例展示了如何使用存储过程作为数据源创建新的临时表。
我想执行这些查询中的任何一个,但我收到了显示的错误。
SELECT * into #temp FROM OPENQUERY("FOO\SQL2012", 'exec MySchema.MyStoredProc')
**ERROR: Server 'FOO\SQL2012' is not configured for DATA ACCESS.**
Run Code Online (Sandbox Code Playgroud)
或此查询:
SELECT * INTO #temp FROM OPENROWSET('SQLNCLI', 'Server=(local)\SQL2012;Trusted_Connection=yes;',
' EXEC MySchema.MyStoredProc')
**ERROR: Msg 11529, Level 16, State 1, Procedure sp_describe_first_result_set, Line 1
Run Code Online (Sandbox Code Playgroud)
无法确定元数据,因为每个代码路径都会导致错误;请参阅其中一些以前的错误。**
我将如何配置 SQL Server 实例以允许当前经过身份验证的用户(无论它可能是谁)对本地实例使用 OPENROWSET、OPENQUERY?
通过 Windows 进行身份验证的用户和通过 SQL Server 进行身份验证的用户是否需要这些查询的单独版本?
windows-authentication sql-authentication openquery openrowset sql-server-2012
我有临时表接受执行存储过程的结果集。我无法更改存储过程。sp 在某些行中返回空列,但我想在将它们插入临时表时将 NULL 转换为 0。如何轻松做到呢?
我的 SQL 是这样的:
Insert into #temp (co1, co2, co3)
exec sp_xxx
Run Code Online (Sandbox Code Playgroud)
sp_xxx 中的 co3 可能为 NULL,但我想将其转换为 0 并存储在 #temp.col3 中
sql ×8
sql-server ×8
t-sql ×4
count ×1
insert ×1
openquery ×1
openrowset ×1
pivot ×1
r ×1
return ×1
temp-tables ×1