我在两个单独的存储过程中使用#temp 表。在一种情况下,它工作正常,而在另一种情况下,它给出错误“无效的对象名称#temp”。
第一种情况:
SELECT SubsID,
SubsName,
AbbrName
INTO #TEMP
FROM SubsList
WHERE CAST (SubsID AS VARCHAR(10)) LIKE '%' + @intRight + '%'
OR SubsName LIKE '%' + @intRight + '%'
它工作正常。
为了使这个 SQL 更加动态,我使用 QUOTENAME 并进行了以下更改: 1.我将 @ColName、@sourceName、@intField 和 @txtField 的数据类型设置为 sysname。2.事实上,我删除了参数@tableName as sysname(值:#temp 已传递给它),因为它在Select and Drop SQL 中给出了错误。3.我在@ColName 中传递一个字段名称。当我传递所有三个字段名称时,它给出了错误。4.我声明@cmd nvarchar(max) 并将SQL分配给它执行。
SET @cmd = N'Select ' + QUOTENAME(@ColName) +
N' INTO #temp from ' + QUOTENAME(@sourceName) +
N' where CAST(' + QUOTENAME(@intField) + N' AS VARCHAR(10)) like ''%' + @strVal +
N'%'' or ' + QUOTENAME(@txtField) + ' like ''%' + @strVal + N'%''' --working
EXEC sp_executesql @cmd;
SELECT *
FROM #temp;
DROP TABLE #temp;
我将 EXEC sp_executesql @cmd 更改为 EXEC(@cmd) 但错误仍然存在。
我收到无效对象名称的错误,但如果我将 #temp 更改为 ##temp,则不会出现此错误。
我的第一个问题:如果使用#temp,这个错误可能是什么原因?第二个问题:如何制作字段名称数组并将其传递给存储过程?