Преобразование не удалось с уникальным идентификатором

Довольно простой здесь, так как я пытаюсь вставить в таблицу, но с ошибкой ниже. Помогите, пожалуйста

SET ANSI_WARNINGS  OFF
INSERT INTO [P6_GrassleyCommitteeInc_20150223].[dbo].[std_Individual]
           ([ind_GUID]
           ,[ind_Prefix]
           ,[ind_FirstName]
           ,[ind_MiddleName]
           ,[ind_LastName]
           ,[ind_Suffix]
           ,[ind_ProfSuffix]
           ,[ind_Title]
           ,[ind_MailName]
           ,[ind_Salutation1]
           ,[ind_Salutation2]
           ,[ind_pty_GUID]
           ,[ind_eth_GUID]
           ,[ind_rac_GUID]
           --,[ind_clo_GUID]
           ,[ind_occ_GUID]
           ,[ind_og1_GUID]
           ,[ind_og2_GUID]
           ,[ind_og3_GUID]
           ,[ind_Birthdate]
           ,[ind_Register]
           ,[ind_Gender]
           ,[ind_Marital]
           ,[ind_VoterId]
           ,[ind_SourceID]
           ,[ind_HashedID]
           ,[ind_Deleted]
           ,[ind_CreatedOn]
           ,[ind_CreatedBy]
           --,[ind_UpdatedOn]
           --,[ind_UpdatedBy]
           --,[ind_DeletedOn]
           --,[ind_DeletedBy]
           ,[ind_int_GUID]
           ,[ind_API_Id]
           ,[ind_Password]
           --,[ind_tracking_GUID]
           ,[ind_Inactive]
           --,[ind_GRPassword]
           )
     select 
          isnull(indguid,''), --,<ind_GUID, uniqueidentifier,>
         '',--  ,<ind_Prefix, nvarchar(10),> --(i thought this field was [indiv. title] but it was not in this database
         isnull(first_name,''),  --,<ind_FirstName, nvarchar(30),>
         '',  --,<ind_MiddleName, nvarchar(30),>
         isnull(last_name,''),  --,<ind_LastName, nvarchar(30),>
         '',  --,<ind_Suffix, nvarchar(10),>
       '',    --,<ind_ProfSuffix, nvarchar(10),>
       isnull(title,''),    --,<ind_Title, nvarchar(100),>
       isnull(mail_name,''),    --,<ind_MailName, nvarchar(50),>
        isnull(salutation,''),   --,<ind_Salutation1, nvarchar(50),>
        '',   --,<ind_Salutation2, nvarchar(50),>
       ptyguid,    --,<ind_pty_GUID, uniqueidentifier,>
       isnull(ethguid,''),    --,<ind_eth_GUID, uniqueidentifier,>
       racguid,    --,<ind_rac_GUID, uniqueidentifier,>
           --,<ind_clo_GUID, uniqueidentifier,>
       occguid,  --  ,<ind_occ_GUID, uniqueidentifier,>
       og1guid,    --,<ind_og1_GUID, uniqueidentifier,>
       og2guid,    --,<ind_og2_GUID, uniqueidentifier,>
       og3guid,    --,<ind_og3_GUID, uniqueidentifier,>
       isnull(birthdate,''), --   <ind_Birthdate, datetime,>
         isnull(register,''), -- <ind_Register, datetime,>
         ISNULL(sex,''),  --,<ind_Gender, nchar(1),>
         'Z',  --,<ind_Marital, nchar(1),>
     ISNULL(VRNUMBER,''),   --,<ind_VoterId, nvarchar(20),>
        LTRIM(IDNUMBER),   --,<ind_SourceID, nvarchar(50),>
        '',   --,<ind_HashedID, nvarchar(50),>
       0,   --,<ind_Deleted, bit,>
        getdate(),  --,<ind_CreatedOn, datetime,>
        '00000000-0000-0000-0000-000000000000',   --,<ind_CreatedBy, uniqueidentifier,>
           --,<ind_UpdatedOn, datetime,>
           --,<ind_UpdatedBy, uniqueidentifier,>
           --,<ind_DeletedOn, datetime,>
           --,<ind_DeletedBy, uniqueidentifier,>
         intguid,  --,<ind_int_GUID, uniqueidentifier,>
         '',  --,<ind_API_Id, nvarchar(10),>
         '',  --,<ind_Password, nvarchar(40),>
          -- ,<ind_tracking_GUID, uniqueidentifier,>
         case when recstatus = '3' then 1 else 0 end  --,<ind_Inactive, bit,>
          -- ,<ind_GRPassword, nvarchar(40),>)
From [P6_GrassleyCommitteeInc_20150223].[dbo].[i_Master] where enttype = 'ind'
GO
SET ANSI_WARNINGS  ON

Ошибка при получении:

Сообщение 8169, уровень 16, состояние 2, строка 2 Не удалось выполнить преобразование при преобразовании строки символов в уникальный идентификатор.

1 ответ

Глядя на документацию ( https://msdn.microsoft.com/en-us/library/ms187942(v=sql.110).aspx), я не думаю, '' является действительным уникальным идентификатором, поэтому ваш ISNULLs, вероятно, вызывают эту проблему.

Вам нужно будет либо удалить ISNULLs и измените вашу схему, чтобы разрешить нулевые значения в этих столбцах; или если вы не можете разрешить нулевые значения или не можете изменить схему, тогда вы можете ввести значение по умолчанию со всеми 0 (как вы сделали для ind_CreatedBy) или сгенерировать одно с NEWID(), который задокументирован здесь https://msdn.microsoft.com/en-us/library/ms190348(v=sql.110).aspx.

Таким образом, ваша строка ind_guid может выглядеть так:

    ISNULL(ind_guid, '00000000-0000-0000-0000-000000000000')

или же

    ISNULL(ind_guid, NEWID())

Я не знаю, каково ваше намерение, но я думаю, что использование NEWID() вероятно, больше соответствует тому, что вы хотите.

Другие вопросы по тегам