我需要执行以下查询
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"。
提前致谢
答案 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