无法使用sp_executesql命令

时间:2017-05-24 06:55:54

标签: sql sql-server stored-procedures

我需要执行以下查询

SELECT *,IDENTITY(int)AS IDColumn INTO #SmootheningTable FROM @TableName

其中 #SmootheningTable 是临时表 和 @TableName 是表格的名称

我需要使用 EXEC sp_executesql 命令来执行。

如果我使用EXEC,我将无法在存储过程的后续部分使用#SmootheningTable。 在尝试sp_executesql时,我收到错误说明@statement错误。 如何在上面给出的查询中使用sp_executesql。

或者还有其他方法可以执行吗?

这是我正在使用的查询

DECLARE @TablePlaceHolder VARCHAR(50)='';
DECLARE @SmootheningQuery NVARCHAR(max) = 'SELECT *, IDENTITY( int ) AS IDColumn INTO #SmootheningTable  FROM  @TablePlaceHolder';
EXEC sp_executesql @SmootheningQuery, N'@TablePlaceHolder varchar(50)', @PlanDetailTempTableName

我的错误

  

必须声明表变量" @ TablePlaceHolder"。

提前致谢

3 个答案:

答案 0 :(得分:0)

请试试这个,

CREATE PROC  usp_SmootheningTable
AS
BEGIN
  SELECT *, IDENTITY( int ) AS IDColumn   INTO #SmootheningTable FROM 
  TableName
  SELECT * FROM  #SmootheningTable 
END
GO

答案 1 :(得分:0)

您的代码中存在两个问题: -

首先:将变量名放在字符串中,然后输入如下: -

而不是这一行: -

DECLARE @SmootheningQuery NVARCHAR(max) = 'SELECT *, IDENTITY( int ) AS 
IDColumn INTO #SmootheningTable  FROM  @TablePlaceHolder';

输入以下行: -

DECLARE @SmootheningQuery NVARCHAR(max) = 'SELECT *, IDENTITY( int ) AS 
IDColumn INTO #SmootheningTable  FROM  ' + @TablePlaceHolder;

第二:请勿在{{1​​}},

中使用本地临时表

本地临时表[带有一个哈希#]仅在当前会话中可见,使用全局临时表而不是[带有两个哈希## ]在所有会话,

所以而不是

sp_executeSql

类型

#SmootheningTable

演示(所有代码): -

##SmootheningTable

<强>结果: -

Create table MyTable (id int , name nvarchar(100))
go

insert into MyTable values (1, 'Ahmed');
insert into MyTable values (2, 'Abdelqader');
go

declare 
    @TableName varchar(50),
    @MyQuery nvarchar(200)

set  @TableName = 'MyTable'

set @MyQuery = 'select * Into ##MYTempTable From ' + @TableName 

exec sp_executesql @MyQuery



select * from ##MYTempTable

答案 2 :(得分:0)

请试一试

CREATE TABLE #Temp
(
Columns
)

DECLARE @SQL NVARCHAR(MAX)
DECLARE @TableName VARCHAR(MAX)

SET @TableName = 'TableName'
SET @SQL = 'SELECT  TOP 10 * FROM '+@TableName

INSERT INTO #Temp
EXEC SP_EXECUTESQL @SQL

SELECT * FROM #Temp