gpt4 book ai didi

sql-server - 在 TSQL 中处理不明确的 varchar(唯一标识符与否)时转换失败

转载 作者:行者123 更新时间:2023-12-04 05:35:47 26 4
gpt4 key购买 nike

允许用户通过方案的 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'

(列 schemeid 是表 uniqueidentifier 中的 SCHEMES )。

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

Conversion failed when converting from a character string to uniqueidentifier.



我试过 CASTCONVERT ,但我无法让它们工作。如果我得到保证, SCHEMES 中只有一个方案|我可以让它工作,但事实并非如此。
SET @XMLSchemeID = (SELECT TOP 1 schemeid FROM #ModelsForScheme)
SET @SchemeID= (SELECT TOP 1 schemeid FROM SCHEMES)
IF @XMLSchemeID<>@SchemeID
Select 'yeaaaaa no error'

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

最佳答案

使用以下 IF 检查 @XMLScheme 是 uid 还是字符串。

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'

关于sql-server - 在 TSQL 中处理不明确的 varchar(唯一标识符与否)时转换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11958782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com