The "N" string prefix indicates that the string contains Unicode data:
'ABCDE' Is ASCII data
N'ABCDE' Is Unicode data
Similarly, the "N" in
NVARCHAR
indicates it is Unicode, without it the
VARCHAR
column is ASCII.
Your SP knows about and expects Unicode data, so it saves Unicode - but when you execute the procedure you have to hand it a Unicode string not an ASCII string.
So if your executing code passes a fixed Korean language string:
MS SQL 서버 테이블에 한국어를 저장하고 싶습니다.
Then it needs to be created with the Unicode prefix:
CALL MyStoredProcedure(N'MS SQL 서버 테이블에 한국어를 저장하고 싶습니다.')
Because if you don't, then it will pass an ASCII string and you will see "????" in your DB as a result:
CALL MyStoredProcedure('MS SQL 서버 테이블에 한국어를 저장하고 싶습니다.')
When you pass data to SQL from a presentation language such as C#, it will default to Unicode but other languages may use ASCII by default (for example, C)