Torakami Ответов: 1

Ошибка преобразования типа данных varchar в datetime.


exec [mob].[MobileGetCustomerLocationMap] @RequestUserID=14,@RequestType=0,@LastSyncDate='2016-07-05 09:10:12.4530000'



Как я могу справиться с этим типом свидания? Я не получаю лишний ноль в конце свидания каждый раз .. но хочу разобраться с этим

Что я уже пробовал:

ALTER PROCEDURE [mob].[MobileGetCustomerLocationMap]
@RequestUserID INT,
@RequestType BIT, 
@LastSyncDate DATETIME
As 
BEGIN
    IF (@RequestType = 1)
	BEGIN
		SET @LastSyncDate = NULL;
	END

	DECLARE @Customer Table
	(
		CustomerToCustomerLocationID INT ,
		CustomerID int,
		CustomerLocationID int,
		IsDefault BIT,
		IsInActive BIT,
		UpdatedOn datetime		 
	)

	IF (@LastSyncDate IS NOT NULL)
	BEGIN
		INSERT INTO @Customer(CustomerToCustomerLocationID,IsInActive,UpdatedOn)
		SELECT DISTINCT ccl.CustomerToCustomerLocationID,1,ccl.UpdatedOn 
		FROM UserToCustomerHistory uch
		INNER JOIN CustomerToCustomerLocation ccl ON uch.CustomerID = uch.CustomerID		
		LEFT OUTER JOIN UserToCustomer uc ON uch.UserID = uc.UserID AND uch.CustomerID = uc.CustomerID AND  uc.IsInActive = 0
		WHERE uch.UserID = @RequestUserID AND uch.EndDate > @LastSyncDate AND uc.CustomerID IS NULL
	END

Suvendu Shekhar Giri

Пожалуйста, поделитесь строкой, где вы объявили @LastSyncDate. Я подозреваю, что вы объявили его как varchar/nvarchar.

Torakami

это только дата и время, пожалуйста, проверьте, что я обновил свой код

Suvendu Shekhar Giri

Хорошо. Также хотелось бы попросить проверить, является ли столбец UpdatedOn в таблице UserToCustomer полем datetime.

Torakami

да

Maciej Los

Что такое точное сообщение об ошибке?
Делает [mob].[MobileGetCustomerLocationMap] процедура вызывается из программного обеспечения? Почему вы получаете дополнительные нули в строке и даты?
Вы пробовали что-то подобное: SELECT CONVERT(DATETIME, LEFT(@LastSyncDate, 23)) AS MyDate?

1 Ответов

Рейтинг:
11

Bunty Choudhary

IF (@RequestType = 1)
BEGIN
SET @LastSyncDate = NULL;
END

Declare @convDate datetime

set @convDate = CONVERT(VARCHAR(23), @LastSyncDate, 110)

DECLARE @Customer Table
(
CustomerToCustomerLocationID INT ,
CustomerID int,
CustomerLocationID int,
IsDefault BIT,
IsInActive BIT,
UpdatedOn datetime	
)

IF (@LastSyncDate IS NOT NULL)
BEGIN
INSERT INTO @Customer(CustomerToCustomerLocationID,IsInActive,UpdatedOn)
SELECT DISTINCT ccl.CustomerToCustomerLocationID,1,ccl.UpdatedOn 
FROM UserToCustomerHistory uch
INNER JOIN CustomerToCustomerLocation ccl ON uch.CustomerID = uch.CustomerID	
LEFT OUTER JOIN UserToCustomer uc ON uch.UserID = uc.UserID AND uch.CustomerID = uc.CustomerID AND uc.IsInActive = 0
WHERE uch.UserID = @RequestUserID AND uch.EndDate > @convDate AND uc.CustomerID IS NULL
END


Suvendu Shekhar Giri

Не могли бы вы описать, как это будет работать-
Declare @convDate datetime --объявлена переменная datetime
-- CONVERT(VARCHAR (23), @LastSyncDate, 110) --convert @LastSyncDate to varchar value
set @convDate = CONVERT(VARCHAR(23), @LastSyncDate, 110) -- присвоить переменной datetime значение varchar

Если я где-то ошибаюсь, пожалуйста, поправьте меня.

Bunty Choudhary

Да, верно.

Bunty Choudhary

Это полезно для вас ?