Ошибка преобразования при преобразовании строки символов в сообщение об уникальном идентификаторе - PullRequest
0 голосов
/ 13 марта 2012

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

Это строка из моей хранимой процедуры:

SET @AdIDNumber = PARSENAME(REPLACE(@AdIDNumber, '-', '.'), 1);

ADIDNumber - параметр, передаваемый в эту хранимую процедуру.Я пытаюсь получить последний компонент ADIDNumber nvarchar, разделенный '-'.Я получаю следующую ошибку:

Не удалось выполнить преобразование при преобразовании строки символов в uniqueidentifier.

Странно то, что это происходит не каждый раз.Вот некоторые ADIDNumbers, которые работают:

188CR-000O-000199
188CR-000D-000105

и некоторые, которые вызывают ошибку:

188CR-000A-000505
188CR-000S-001459

Что я делаю не так?Пожалуйста помоги.

Спасибо.

РЕДАКТИРОВАТЬ:

Вот вся моя хранимая процедура:

ALTER PROCEDURE [dbo].[sp_getOutlookDetails]
-- Add the parameters for the stored procedure here
@CountryName nvarchar(max),
@CommunityName nvarchar(max),
@AdIDNumber nvarchar(max)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

DECLARE @dbName nvarchar(max);
-- remove spaces
SET @CountryName = LOWER(REPLACE(@CountryName, ' ', ''));
SET @CommunityName = LOWER(REPLACE(@CommunityName, ' ', ''));


SET @dbName = @CountryName;
IF @CommunityName IS NOT NULL
    SET @dbName = @dbName+'_'+@CommunityName;

IF DB_ID(@dbname) IS NULL
    BEGIN
    RAISERROR('Database not found',16,1)
    RETURN
    END

DECLARE @tab AS TABLE (AdName nvarchar(max), OwnerJALName nvarchar(max), OwnerEmail nvarchar(max), AdContactEmail nvarchar(max), 
                  AdWebsiteLink nvarchar(max), Ad1stPhone nvarchar(max), Ad2ndPhone nvarchar(max), VideoUrl nvarchar(max), 
                  AdBusinessType nvarchar(max), AdBusinessLocation nvarchar(max), 
                  PublishStatus INTEGER, MediaGalleryEnabled INTEGER, MapTabEnabled nvarchar(max),
                  MapCategory nvarchar(max), VMEnabled INTEGER);

-- format the PostID
SET @AdIDNumber = PARSENAME(REPLACE(@AdIDNumber, '-', '.'), 1); 

-- we fill the table with LocationCoordinates in the MapCategory column twice so we can replace it later
DECLARE @dynsql nvarchar(max);
DECLARE @PostIDInt INTEGER;
SET @PostIDInt = CAST(@AdIDNumber AS INTEGER);
SET @dynsql = N'USE '+ QUOTENAME(@dbname) + N' SELECT dbo.cs_Posts.Subject, dbo.cs_Users.UserName, dbo.cs_Users.Email, dbo.drive_DirectoryPosts.ContactEmail, 
                  dbo.drive_DirectoryPosts.ContactWebsite, dbo.drive_DirectoryPosts.ContactPhone, dbo.drive_DirectoryPosts.ContactPhoneOther, dbo.drive_DirectoryPosts.VideoUrl, 
                  dbo.drive_DirectoryPosts.ContactBusinessType, dbo.drive_DirectoryPosts.ContactBusinessLocation, 
                  dbo.drive_DirectoryPosts.IsActive, dbo.drive_DirectoryPosts.IsMediaGalleryActive, 
                  dbo.drive_DirectoryPosts.LocationCoordinates, dbo.drive_DirectoryPosts.LocationCoordinates, dbo.drive_DirectoryPosts.IsMediaGalleryActive
                  FROM dbo.drive_DirectoryPosts INNER JOIN
                  dbo.cs_Posts ON dbo.drive_DirectoryPosts.PostID = dbo.cs_Posts.PostID INNER JOIN
                  dbo.cs_Users ON dbo.cs_Posts.UserID = dbo.cs_Users.UserID
                  WHERE dbo.cs_Posts.PostID = @PostIDInt';

INSERT INTO @tab EXECUTE sp_executesql @dynsql, N'@PostIDInt INTEGER', @PostIDInt = @PostIDInt;

DECLARE @MapCategory nvarchar(max);
DECLARE @VMEnabled INTEGER;
EXEC [dbo].sp_getMapCategory @dbName, @PostIDInt, @MapCategory OUTPUT, @VMEnabled OUTPUT;

UPDATE @tab SET MapCategory = @MapCategory;
UPDATE @tab SET VMEnabled = @VMEnabled;
SELECT * FROM @tab;

Ответы [ 2 ]

0 голосов
/ 02 апреля 2012

Это было вызвано хранимой процедурой sp_getMapCategory.

0 голосов
/ 13 марта 2012

Может быть, что-то вроде этого:

DECLARE @AdIDNumber VARCHAR(MAX)
SET @AdIDNumber='188CR-000O-000199'
DECLARE @REVERSE VARCHAR(MAX)=REVERSE(@AdIDNumber)
select REVERSE(LEFT(@REVERSE,CHARINDEX('-',@REVERSE)-1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...