2017-09-04 18 views
0

我想测试一个变量是唯一标识符,如果它然后将其转换为字符串,但它失败:的SQL Server 2012:检查是否是唯一标识符并转换为字符串

Declare @Item VARCHAR(50) 
Declare @OutString varchar(max) ; 

[email protected] is populated from various tables each cell separated by ',' 
--Getting the @Item from the @Outstring and convert it if its uid 
DECLARE @Pos INT 
DECLARE @Loop BIT 

SELECT @Loop = CASE WHEN LEN(@OutString) > 0 THEN 1 ELSE 0 END 

WHILE (SELECT @Loop) = 1 
BEGIN 
    SELECT @Pos = CHARINDEX(',', @OutString, 1) 

    IF @Pos > 0 
    BEGIN 
     SELECT @Item = SUBSTRING(@OutString, 1, @Pos - 1) 
     SELECT @OutString = SUBSTRING(@OutString, @Pos + 1, LEN(@OutString) - @Pos) 

     IF (TRY_CONVERT(UNIQUEIDENTIFIER, @Item) IS NOT NULL) 
     BEGIN 
      CONVERT(NVARCHAR(50), @Item) AS @Item --ERROR LINE incorrect syntax 
     END 
    END 
END 
+0

以什么方式失败?请提供更多信息。请发布工作代码(你有三个“开始”和一个“结束”)。如果发生错误,请隔离它发生的行并发布该信息 –

+0

当你尝试这个'select convert(nvarchar(50),@Item)作为@Item'而不是'convert(nvarchar(50),@ Item)as @ Item' – TheGameiswar

+0

你得到了转换函数的语法错误。你看过语法吗? https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql –

回答

0

它要么是

select @Item = convert(nvarchar(50), @Item) 

select @Item = cast(@Item as nvarchar(50)) 
0

使用

SELECT convert(nvarchar(50), @Item) as Item 
0

语法错误是因为您说过该操作,而不是SQL应该用它做什么。

你想要返回字符串吗?

SELECT CONVERT(NVARCHAR(50), @Item) AS Item 

附加到@Item? (但这个变量是你的循环里面?)

SET @Item += CONVERT(NVARCHAR(50), @Item) 

不知道你想做的事,一旦你转换的字符串的内容。也许你需要另一个变量来添加字符串(如上面除了不是SET @Item