Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вопросы вместо "уникальных" русских букв  [new]
slivka_83
Member

Откуда:
Сообщений: 64
Добрый день :)

Такая проблема... имеется БД, которая содержит таблички и вьюхи.
Я написал процедуру которая выбирает данные из вьюх. Тестирую ее в Management Studio - если в выборке имеются данные содержащие русские буквы, то те символы, для которых в латинском алфавите нет аналогов (например, Я, И) отображаются знаками вопроса. При этом остальные буквы отображаются нормально.

При выборке данных из вьюх и таблиц напрямую все русские буквы также отображаются нормально!

Подскажите плиз в чем может быть проблема? Заранее спасибо :)
20 июл 11, 17:15    [11001814]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы вместо "уникальных" русских букв  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
slivka_83,

N
20 июл 11, 17:20    [11001848]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы вместо "уникальных" русских букв  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
iap
slivka_83,

N
Даже не так.

Какого типа поля?
И на процедуру посмотреть можно?
20 июл 11, 17:22    [11001870]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы вместо "уникальных" русских букв  [new]
slivka_83
Member

Откуда:
Сообщений: 64
iap
iap
slivka_83,

N
Даже не так.

Какого типа поля?
И на процедуру посмотреть можно?


Сори :) имел ввиду "И" :)

Процедура выглядит так... При этом она еще вызвает другие функции...

USE [tfe_MSCRM]

GO

/****** Object:  StoredProcedure [dbo].[AuditCRM]    Script Date: 07/20/2011 12:02:27 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

 

 

ALTER PROCEDURE [dbo].[AuditCRM]

      @obj VARCHAR(50),

      @usr VARCHAR(50),

      @start datetime,

      @end datetime

AS

BEGIN

      

      IF @usr = 'vse' SET @usr = '%'

      

      CREATE TABLE #tlog ( 

            Fields VARCHAR(100),

            ChangeData VARCHAR(500),

            newValue VARCHAR(500),

            RecordId VARCHAR(100),

            ObjectName VARCHAR(100),

            UserIdName VARCHAR(100),

            UserId VARCHAR(100),

            DomainName VARCHAR(100),

            CreatedOn VARCHAR(100),

            IP VARCHAR(100)

      )

 

      DECLARE log_cursor CURSOR

      FOR

 

            SELECT

                  SUBSTRING(A.AttributeMask,2,LEN(A.AttributeMask)-2) Fields,      

                  A.ChangeData,

                  A.ObjectId RecordId,

                  E.Name ObjectName,

                  E.ObjectTypeCode ObjectCode,

                  A.UserIdName,

                  A.UserId,

                  U.DomainName,

                  A.CreatedOn,

                  (

                        SELECT TOP 1

                             ClientHost

                        FROM

                             IISLogs.dbo.InternetLog IL

                        WHERE

                             1=1

                             AND IL.username COLLATE SQL_Latin1_General_CP1_CI_AS = U.DomainName COLLATE SQL_Latin1_General_CP1_CI_AS

                             AND (

                                   DATEADD(mm, -1, IL.LogTime) < dbo.fn_UTCToLocalTime(A.CreatedOn)

                                   AND

                                   dbo.fn_UTCToLocalTime(A.CreatedOn) < DATEADD(mm, 1, IL.LogTime)

                             )

                  ) IP 

            FROM

                  Audit A

                        INNER JOIN EntityView E 

                             ON A.ObjectTypeCode = E.ObjectTypeCode

                        INNER JOIN SystemUser U 

                             ON A.UserId = U.SystemUserId

            WHERE

                  1=1

                  AND A.Action = '2'

                  AND A.ObjectTypeCode = @obj

                  AND A.UserId LIKE @Usr

                  AND (A.CreatedOn between @start AND @end)

            ORDER BY A.CreatedOn DESC

 

      OPEN log_cursor

            DECLARE

                  @Fields VARCHAR(100),

                  @ChangeData VARCHAR(500),

                  @RecordId VARCHAR(100),

                  @ObjectName VARCHAR(100),

                  @ObjectCode VARCHAR(100),

                  @UserIdName VARCHAR(100),

                  @UserId VARCHAR(100),

                  @DomainName VARCHAR(100),

                  @CreatedOn DATETIME,

                  @IP VARCHAR(100)

 

            FETCH NEXT FROM log_cursor INTO @Fields, @ChangeData, @RecordId, @ObjectName, @ObjectCode, @UserIdName, @UserId, @DomainName, @CreatedOn, @IP

            WHILE @@FETCH_STATUS = 0

            BEGIN

            

                  INSERT INTO

                        #tlog

                  SELECT

                        sitem Field,

                        yitem Change,

                        [dbo].[fnNewValue](@RecordId, @ObjectCode, @CreatedOn, zitem) newValue,

                        @RecordId RecordId,

                        @ObjectName ObjectName,

                        @UserIdName UserIdName,

                        @UserId UserId,

                        @DomainName UserDomainName,

                        @CreatedOn CreatedOn,

                        @IP IP

                  FROM

                        dbo.fnSplit(@Fields, @ChangeData, @ObjectCode)

 

            FETCH NEXT FROM log_cursor INTO @Fields, @ChangeData, @RecordId, @ObjectName, @ObjectCode, @UserIdName, @UserId, @DomainName, @CreatedOn, @IP

      END

            

      CLOSE log_cursor

      DEALLOCATE log_cursor

      

      DECLARE setCuttentValue CURSOR

      FOR

            SELECT

                  Fields,

                  newValue,         

                  RecordId,

                  ObjectName,

                  CreatedOn

            FROM

                  #tlog

      OPEN setCuttentValue

            DECLARE

                  @Field VARCHAR(100),

                  @new VARCHAR(500),

                  @Id VARCHAR(100),

                  @Object VARCHAR(100),

                  @Date VARCHAR(100)

 

            FETCH NEXT FROM setCuttentValue INTO @Field, @new, @Id, @Object, @Date

            WHILE @@FETCH_STATUS = 0

            BEGIN

            

                  DECLARE @curValue varchar(500)

                  CREATE TABLE #tcurValue (curValue VARCHAR(500))

                  

                  IF @new is NULL

                  BEGIN

                        INSERT #tcurValue EXEC curValue @Object, @Field, @Id

                        SELECT TOP 1 @curValue = curValue FROM #tcurValue

                        

                        UPDATE #tlog

                        SET newValue = @curValue

                        WHERE

                             1=1

                             AND RecordId = @Id

                             AND Fields = @Field

                             AND CreatedOn = @Date

                  END

                  

                  DROP TABLE #tcurValue

 

            FETCH NEXT FROM setCuttentValue INTO @Field, @new, @Id, @Object, @Date

      END

            

      CLOSE setCuttentValue

      DEALLOCATE setCuttentValue

 

      SELECT * FROM #tlog 

            

      DROP TABLE #tlog

 

END


Сообщение было отредактировано: 20 июл 11, 17:29
20 июл 11, 17:28    [11001908]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы вместо "уникальных" русских букв  [new]
slivka_83
Member

Откуда:
Сообщений: 64
iap
Какого типа поля?


Поля тип NVarChar
20 июл 11, 17:29    [11001916]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы вместо "уникальных" русских букв  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
slivka_83
iap
Какого типа поля?


Поля тип NVarChar
А все строковые переменные в вашем коде почему-то varchar.
20 июл 11, 17:31    [11001934]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы вместо "уникальных" русских букв  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
И во временной таблице тоже.

Сообщение было отредактировано: 20 июл 11, 17:32
20 июл 11, 17:31    [11001939]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы вместо "уникальных" русских букв  [new]
slivka_83
Member

Откуда:
Сообщений: 64
Гавриленко Сергей Алексеевич
slivka_83
пропущено...


Поля тип NVarChar
А все строковые переменные в вашем коде почему-то varchar.


Заменил все на Nvarchar - заработало :) большое спасибо :)
20 июл 11, 17:34    [11001963]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить