Преобразование не удалось с уникальным идентификатором
Довольно простой здесь, так как я пытаюсь вставить в таблицу, но с ошибкой ниже. Помогите, пожалуйста
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), я не думаю, ''
является действительным уникальным идентификатором, поэтому ваш ISNULL
s, вероятно, вызывают эту проблему.
Вам нужно будет либо удалить ISNULL
s и измените вашу схему, чтобы разрешить нулевые значения в этих столбцах; или если вы не можете разрешить нулевые значения или не можете изменить схему, тогда вы можете ввести значение по умолчанию со всеми 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()
вероятно, больше соответствует тому, что вы хотите.