2015-09-17 3 views
-1

Я хочу, чтобы проверить запрос в SQLServer, но у меня есть сообщение об ошибке Conversion failed when converting from a character string to uniqueidentifier.Как объявить UserId добавление новой таблицы

Declare @UserId nVarchar='3847609f-6fd1-4a14-9675-000d74a5df80' 
Declare @PersonId int=936; 
INSERT INTO [dbo].[Users_Emps] ([UserId],[EmpId]) (SELECT distinct  
CONVERT(UNIQUEIDENTIFIER,@UserId),Employee.EmpId FROM Employee 
inner join Users_Emps ON Employee.EmpId = Users_Emps.EmpId where 
[email protected]) 

enter image description here Я беру параметры из кода за

DsUsers_Emps.InsertParameters["UserId"].DefaultValue = 
Membership.GetUser(UserName.Text).ProviderUserKey.ToString(); 
    DsUsers_Emps.InsertParameters["PersonId"].DefaultValue=PersonsDropDownList.SelectedValue; 
    DsUsers_Emps.Insert(); 

ответ

1

Всегда указывайте размер:

Declare @UserId NVARCHAR(100)='3847609f-6fd1-4a14-9675-000d74a5df80'; 

SELECT CAST(@UserId AS UNIQUEIDENTIFIER); 

Использование:

Declare @UserId NVARCHAR; 

/* Is the same as */ 

Declare @UserId NVARCHAR(1); 

И ваш @UserId = '3'

1
Declare @UserId nVarchar='3847609f-6fd1-4a14-9675-000d74a5df80' 

В выше куске фрагменте кода вы объявили переменную @UserID в NVARCHAR, здесь вы не упомянули любой длины к нему по умолчанию это . Поэтому, если выполняется следующий оператор, он вернет 3 в качестве результата istead '3847609f-6fd1-4a14-9675-000d74a5df80'.

Select @UserId as 'UserID' 

Теперь здесь вы пытаетесь конвертировать @UserID в UniqueIdentifier. Для преобразования мы требуем строку символов формата

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

но один генерируют

Declare @UserId nVarchar='3847609f-6fd1-4a14-9675-000d74a5df80' 

является х. Следовательно, преобразование не удалось.

Как указано @ lad2025, Укажите размер 50, 100 или 255. Укажите тип данных nVarchar фиксированной длины.

Declare @UserId nVarchar(50)='3847609f-6fd1-4a14-9675-000d74a5df80' 

или

Declare @UserId nVarchar(255)='3847609f-6fd1-4a14-9675-000d74a5df80' 

Он будет работать.

Ссылка:nVarchar vs nVarchar(n) и UniqueIdentifier