Я знаю, что есть много вопросов, похожих на этот в отношении переполнения стека, но ни один из них не может ответить на мою проблему.
Это строка из моей хранимой процедуры:
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;