2014-11-25 6 views
0

Я хочу сохранить символы, не являющиеся английскими юникодами, в таблицу на SQL Server.Как хранить символы английского языка без английского языка с использованием динамического запроса в SQL Server

declare @cSql varchar(200) 
set @cSql = '' 

declare @cCode varchar(10) 
set @cCode = '001' 

declare @cKName Nvarchar(200) 
set @cKName = N'ಒಂದು' 

Insert into DepMast (omCode, omKName) 
Values(@cCode, @cKName) 

При выполнении вышеуказанного кода символы Юникода сохраняются по мере необходимости.

Но, если я использую динамический запрос, сохраняется '?????'.

set @cSql = 'Insert into DepMast (omCode, omKName) 
      Values(''' + @cCode + ''',''' + @cKName + ''')' 

exec(@cSql) 

Любые идеи по хранению символов юникода с использованием динамического запроса?

+0

Какая у вас настройка базы данных? – Raj

+0

Это SQL_Latin1_General_CP1_CI_AS – user2944673

ответ

1

две причины такого поведения - во-первых, вы заявили @cSql в varchar типа данных и @cKName как nvarchar типа данных. Во-вторых, вы не префикс значения N при вставке. Это должно исправить проблему

declare @cSql nvarchar(200) --changed datatype to nvarchar 
set @cSql='' 
declare @cCode varchar(10) 
set @cCode='001' 
declare @cKName nvarchar(200) 
set @cKName=N'ಒಂದು' 
set @cSql='Insert into DepMast (omCode,omKName) 
Values('''[email protected]+''',N'''[email protected]+''')' -- added the "N" prefix 
exec(@cSql) 
+0

Спасибо большое. Работает. – user2944673

Смежные вопросы