2009-09-25 433 views
20

Creado un procedimiento almacenado en SQL 9 (2005) y desde entonces actualizado a SQL 10 (2008). Desde entonces, el siguiente procedimiento almacenado ha dejado de funcionar y arrojado el error anterior:Error de conversión al convertir de una cadena de caracteres a uniqueidentifier

ALTER PROCEDURE [dbo].[GetModifiedPages] 
    @vPortalUID   nvarchar(32) = '' 
AS 
BEGIN 
    -- Convert GUID to UI 
    DECLARE @nPortalUID AS uniqueidentifier 
    SET @nPortalUID = CAST(@vPortalUID AS uniqueidentifier) 

El pasado en @vPortalUID PARAM contiene: 2A66057D-F4E5-4E2B-B2F1-38C51A96D385. Ejecuto el proceso almacenado como este:

EXEC GetModifiedPages '2A66057D-F4E5-4E2B-B2F1-38C51A96D385' 

Se cae. He intentado Convertir también. Todavía no hay alegría. También he tenido el valor entrando con {} a su alrededor. Lo eliminé programaticamente y manualmente como se indica arriba.

Si está interesado estoy ejecutando el SP desde una página ASP Classic, aunque eso no debería afectar a esto ya que el código anterior se ejecutó con SSMS.

Gracias de antemano por su ayuda. James

Respuesta

31

esto falla:

DECLARE @vPortalUID NVARCHAR(32) 
SET @vPortalUID='2A66057D-F4E5-4E2B-B2F1-38C51A96D385' 
DECLARE @nPortalUID AS UNIQUEIDENTIFIER 
SET @nPortalUID = CAST(@vPortalUID AS uniqueidentifier) 
PRINT @nPortalUID 

esto funciona

DECLARE @vPortalUID NVARCHAR(36) 
SET @vPortalUID='2A66057D-F4E5-4E2B-B2F1-38C51A96D385' 
DECLARE @nPortalUID AS UNIQUEIDENTIFIER 
SET @nPortalUID = CAST(@vPortalUID AS UNIQUEIDENTIFIER) 
PRINT @nPortalUID 

la diferencia es NVARCHAR(36), el parámetro de entrada es demasiado pequeña!

+3

+1 por el hecho de que su parámetro es demasiado pequeño, pero debe tenerse en cuenta que, debido a eso, su cadena está realmente truncada. Si hiciste un 'print vPortalUID' antes de convertir, verías que' D385' no hizo el corte. – Eric

+0

¡Gracias! ¡Buen trabajo! ¡Ahora para cambiar los 20 SP! ;) – jamesmhaley

+0

No sé por qué estaba haciendo eso http://stackoverflow.com/questions/1390109/convert-varchar-to-uniqueidentifier-in-sql-server: p .. Debería haber lanzado primero el varchar + 1 por supuesto! – Zerotoinfinity

Cuestiones relacionadas