Loading...
VenelinGrozev avatar VenelinGrozev 130 Точки

Малко помощ за Problem 22 от домашното Advanced SQL

Някой би ли споделил решение си на тази задача. Моето упорито връща долната грешка

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the nvarchar value 'rtamburello' to data type int.

Заявката ми изобщо не е сложна -- искам да вкарам един ред в таблицата Users

insert into Users (Username, Password, FullName, LastLogin, GroupID)
select
    convert(nvarchar(50), concat(substring(e.FirstName, 1, 1), lower(e.LastName))) as Username,
    convert(nvarchar(50), concat(substring(e.FirstName, 1, 1), lower(e.LastName))) as Password,
    convert(nvarchar(50), concat(e.FirstName, ' ', e.LastName)) as FullName,
    NULL,
    NULL
from Employees e
where e.EmployeeID = 3

Уж типовете на колоните съвпадат навсякъде, експлицитно се конвертират но явно, че нещо пропускам само не мога да разбера какво.

Тагове:
0
Databases Basics
nick.genov avatar nick.genov 104 Точки

Я качи кода с който създаваш таблицата. При мен скрипта ти мина. Ето как правя таблица Users (обединих промените на таблицата от домашното и махнах някои ограничения):

CREATE TABLE Users (
    ID INT IDENTITY,
    Username NVARCHAR(50) NOT NULL,
    Password NVARCHAR(50) NOT NULL,
    FullName NVARCHAR(100) NOT NULL,
    LastLogin DATE NULL,
    GroupID INT NULL
    CONSTRAINT PK_Users PRIMARY KEY (ID)
)

0
01/07/2015 00:25:06
VenelinGrozev avatar VenelinGrozev 130 Точки

Това е кода за създаване на таблицата

CREATE TABLE Users (
    UserID int IDENTITY,
    Username nvarchar(50) NOT NULL UNIQUE,
    Password nvarchar(50) NOT NULL CHECK(Password > 5),
    FullName nvarchar(50) NOT NULL,
    LastLogin date
    CONSTRAINT PK_Users PRIMARY KEY (UserID ASC)
)

0
nick.genov avatar nick.genov 104 Точки

Тук е проблема: CHECK(Password > 5)

Трябва да е:

CHECK(LEN(Password) > 5)

Опитваш се да сравниш 5 и nvarchar, няма как. LEN ти връща дължината на паролата, което всъщност ти трябва.

1
01/07/2015 00:23:30
VenelinGrozev avatar VenelinGrozev 130 Точки

Тръгна сега, много ти благодаря! Поне 5 пъти го гледах този check и така и не се усетих.

0
pepster avatar pepster 69 Точки

И аз имам въпрос по тази задача - Как сте заобиколили следните проблеми :

1. Първия ми проблем е свързан е с CHEK CONSTRAINT на колона Password - т.като има в Employees записи, които формират парола с по-малко от 5 симола. Няма доп.инфо в условието дали и как да се дообработят тези записи.

2.Втория проблем е свързан с UNIQUE CONSTRAINT на USerName-a. В Employees има 2 записа, които при преопразуването си дават еднакви UsarName а именно усърнейма Ahill:

185    Andrew    Hill
264    Annette    Hill

Няма нищо по-лесно и това тези констраинти .. да се дропнат преди инсърта .. но... в реалността те се слагат с цел .... та ...  как сте заобиколили дропването ?

0
verito898 avatar verito898 265 Точки

аз реших проблема с drop  ,но ще следя темата за евентуални други решения

0
01/07/2015 17:02:15
nick.genov avatar nick.genov 104 Точки

Аз ги махнах за да мине инсърта, с ALTER TABLE.

0
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Аз го направих по следния начин:

  • Първо проверявам дали в таблицата съществува този Constraint:
IF (OBJECT_ID('CK_Users_Password') IS NOT NULL)
BEGIN
	ALTER TABLE Users DROP CONSTRAINT CK_Users_Password;
END
GO
  • Изпълнявам кода за конкретния problem
  • Връщам си отново Check-a
ALTER TABLE Users WITH NOCHECK ADD
CONSTRAINT CK_Users_Password CHECK (LEN(Password)>= 5)
GO

 

0
ydonev avatar ydonev 6 Точки

Имах сходен проблем. Но при мен беше заради липса на auto increment-a (IDENTITY).

0
02/07/2015 19:42:22
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.