두 개의 별도 저장 프로 시저에서 #temp 테이블을 사용하고 있습니다. 하나의 경우에는 제대로 작동하지만 다른 경우에는 '잘못된 개체 이름 #temp'오류가 발생합니다.잘못된 개체 이름 #temp 동적 SQL 및 필드 이름 배열
첫 번째 경우 : 그것은 확인하고있다
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. Select and Drop SQL에서 오류가 발생하여 sysname (value : #temp가 전달됨)으로 param @tableName을 제거했습니다. 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를 사용하는 경우이 오류의 원인은 무엇일까요? 두 번째 질문 : 필드 이름 배열을 만들어 저장 프로 시저에 전달하는 방법은 무엇입니까?
SQL 삽입을 피하기 위해 실행되는 문자열에'sp_executesql'을 단순히 연결하는 대신'@ strVal'을 매개 변수로 전달해야합니다. –