【问题标题】:Select * into exec command doesn't work?select * into exec 命令不起作用?
【发布时间】:2014-09-11 18:41:18
【问题描述】:

我正在使用OPENROWSET 命令来执行查询。

我希望结果值必须像这样插入到临时表中

SELECT * INTO #TempTable EXEC @query

但它显示错误

对象或列名丢失或为空。对于 SELECT INTO 语句,验证每一列都有一个名称。对于其他语句,请查找空别名。不允许使用定义为 "" 或 [] 的别名。将别名更改为有效名称。

谁能告诉我如何执行查询并插入到临时表中?

示例代码是

declare @Query nvarchar(max)
SET @Query ='SELECT 
                *
            FROM
                OPENROWSET
                (
                        ''SQLNCLI'',
                        ''servername'';
                        ''db'';
                        ''pwd'',
                        ''set nocount on;
                        set fmtonly off;
                        exec databaseName.dbo.spname ''''param1 '''',''''param2'''',''''param3'''',''''param3''''  ''
                )
                '

select * into #temp exec sp_executesql @Query

【问题讨论】:

  • 要明确您使用的是 MSSQL 而不是 MySQL?在 MySQL 中无法创建像 #TempTable 这样的别名
  • 发布@query的代码。似乎您正在查询中进行一些聚合,但没有为该列提供任何别名
  • 您不能将“into #temp”子句放入您通过 sp_executesql 执行的动态 sql 语句中吗?
  • databaseName.dbo.spname 是做什么的?
  • exec 命令将在该数据库中执行该 sp

标签: sql sql-server sql-server-2008 tsql


【解决方案1】:

您必须使用以下格式:

DECLARE @T TABLE(Col1 int, col2 ...)

INSERT INTO @T
EXEC query

SELECT * FROM @T

例如:

DECLARE @T TABLE(name NVARCHAR(100),minimum INT, maximum INT, configvalue INT, runvalue INT)

INSERT INTO @T
EXEC sys.sp_configure

SELECT * FROM @T
WHERE runvalue=1

【讨论】:

  • 很好,但我无法确定哪些字段来自该查询,因为它是动态运行的
  • 为什么我尝试使用 select * into exec @query 插入临时表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多