Search code examples
sqlsql-servert-sqldynamic-sql

Why do I get "Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'." when I try to use sp_executesql?


Why do I get this error

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

when I try to use sp_executesql?


Solution

  • Sounds like you're calling sp_executesql with a VARCHAR statement, when it needs to be NVARCHAR.

    e.g. This will give the error because @SQL needs to be NVARCHAR

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

    So:

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