"프로시 저는 'ntext / nchar / nvarchar'유형의 '@statement'매개 변수를 예상합니다."라는 메시지가 표시되는 이유는 무엇입니까? sp_executesql을 사용하려고 할 때?


96

이 오류가 발생하는 이유

Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.

sp_executesql을 사용하려고 할 때?


1
어떻게 실행하려고합니까? T-SQL에서? 프로그램에서? 필수 "@statement"매개 변수를 전달하고 있습니까?
Matt Hamilton

답변:


217

NVARCHAR이 필요할 때 VARCHAR 문으로 sp_executesql을 호출하는 것처럼 들립니다.

예를 들어 @SQL이 NVARCHAR이어야하므로 오류가 발생합니다.

DECLARE @SQL VARCHAR(100)
SET @SQL = 'SELECT TOP 1 * FROM sys.tables'
EXECUTE sp_executesql @SQL

그래서:

DECLARE @SQL NVARCHAR(100)
SET @SQL = 'SELECT TOP 1 * FROM sys.tables'
EXECUTE sp_executesql @SQL

이것은 작동하지만 (Daniel Renshaw의) 다른 답변은 대부분의 경우 훨씬 더 유용합니다. (무의미한 변수 선언이 필요하지 않기 때문에)
Brondahl

22

해결책은 유형과 SQL 문자열 앞에 N을 넣어 2 바이트 문자열임을 나타내는 것입니다.

DECLARE @SQL NVARCHAR(100) 
SET @SQL = N'SELECT TOP 1 * FROM sys.tables' 
EXECUTE sp_executesql @SQL

0

나는 또 다른 작은 세부 사항을 놓쳤습니다. NVARCHAR 뒤에있는 대괄호 "(100)"을 잊어 버렸습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.