2

允许用户通过方案的 id 或方案的名称发送对方案的引用。如果在记录中找到给定方案作为 id 或名称,则数据有效。临时表...

CREATE TABLE #ModelsForScheme( 
[modelid] uniqueidentifier,  
[schemeid] VARCHAR (36))

临时表稍后被填充。我现在拥有的...

DECLARE @XMLScheme VARCHAR (36)
SET @XMLScheme = (SELECT TOP 1 schemeid FROM #ModelsForScheme) --there will only be one row

DECLARE @SchemeID VARCHAR (36)
SELECT @SchemeID=schemeid FROM SCHEMES WHERE schemeid=@XMLScheme
IF @SchemeID IS NULL
  SELECT @SchemeID=schemeid FROM SCHEMES WHERE [name]=@XMLScheme

IF @SchemeID IS NULL
  SELECT 'Scheme is NULL'

(该列schemeiduniqueidentifier表中的a SCHEMES)。

这在uniqueidentifier发送 a 时工作正常。但是当发送一个名称(例如@XMLScheme = 'dog')时,我收到以下错误;

从字符串转换为唯一标识符时转换失败。

我试过CASTand CONVERT,但我无法让它们工作。SCHEMES如果我得到保证,那是我可以让它工作的唯一一个方案,但事实并非如此。

SET @XMLSchemeID = (SELECT TOP 1 schemeid FROM #ModelsForScheme)
SET @SchemeID= (SELECT TOP 1 schemeid FROM SCHEMES)
IF @XMLSchemeID<>@SchemeID
  Select 'yeaaaaa no error'

任何想法表示赞赏。提前致谢。

4

2 回答 2

2

您的查询失败,因为

.... WHERE schemeid=@XMLScheme

varchar(36)进行从到uniqueidentifieron的隐式类型转换@XMLScheme

您可以在执行查询之前测试是否@XMLScheme有效。uniqueidentifier

if (@XMLScheme like '________-____-____-____-____________' and patindex('%[^-0-9A-F]%', @XMLScheme) = 0)
  SELECT @SchemeID=schemeid FROM SCHEMES WHERE schemeid=@XMLScheme
于 2012-08-14T20:37:42.897 回答
1

Use Following IF to check if @XMLScheme is an uid or a string.

DECLARE @XMLScheme VARCHAR (36)
SET @XMLScheme = (SELECT TOP 1 schemeid FROM #ModelsForScheme) --there will only be one row

DECLARE @SchemeID VARCHAR (36)

IF @XMLScheme like replace('00000000-0000-0000-0000-000000000000','0','[a-fA-F0-9]')
   SELECT @SchemeID=schemeid FROM SCHEMES WHERE schemeid=@XMLScheme
ELSE
  SELECT @SchemeID=schemeid FROM SCHEMES WHERE [name]=@XMLScheme;


IF @SchemeID IS NULL
  SELECT 'Scheme is NULL'
于 2012-08-14T19:31:35.687 回答