将字符串转换为 uniqueidentifier 时失败

haogaoxiao 2012-01-31 12:22:02
例如有这样一个存储过程

CREATE PROCEDURE [dbo].[prtest]
@StrId varchar(max), --公文ID字符串
@count int out
AS
select @count=count(name) from tbA where id in (@StrId)
go


在代码中传入这样的参数,其中strDocID为 'abaa3baa-7338-4ff8-bd74-ac82986c6968','a2251aa2-d760-4728-adf4-4775decd7b9f'

arrParams(0) = New SqlClient.SqlParameter("@StrId", SqlDbType.VarChar)
arrParams(0).Value = strDocID


运行程序就会报错:将字符串转换为 uniqueidentifier 时失败
请教下怎么把strDocID转换传过去
...全文
922 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
haogaoxiao 2012-02-02
  • 打赏
  • 举报
回复
这个方法不错
叶子 2012-01-31
  • 打赏
  • 举报
回复

--创建测试数据
create table tbA(id uniqueidentifier,name varchar(20))
insert into tbA
select 'abaa3baa-7338-4ff8-bd74-ac82986c6968','a' union all
select 'a2251aa2-d760-4728-adf4-4775decd7b9f','b' union all
select '398FB3BA-4CDE-4CD1-BA78-5F8E173838C6','c'

--查看
select * from tbA
/*
id name
------------------------------------ --------------------
ABAA3BAA-7338-4FF8-BD74-AC82986C6968 a
A2251AA2-D760-4728-ADF4-4775DECD7B9F b
398FB3BA-4CDE-4CD1-BA78-5F8E173838C6 c
*/

--创建存储过程
create procedure [dbo].[prtest]
@StrId varchar(max), --公文ID字符串
@count int out
as
select @count=count(name) from tbA where charindex(','+ltrim(id)+',',','+@StrId+',')>0
go

--测试存储过程
declare @c int
exec [prtest] 'abaa3baa-7338-4ff8-bd74-ac82986c6968,a2251aa2-d760-4728-adf4-4775decd7b9f',@c out
select @c as cou
/*
cou
-----------
2
*/
叶子 2012-01-31
  • 打赏
  • 举报
回复

--创建测试数据
create table tbA(id uniqueidentifier,name varchar(20))
insert into tbA
select 'abaa3baa-7338-4ff8-bd74-ac82986c6968','a' union all
select 'a2251aa2-d760-4728-adf4-4775decd7b9f','b' union all
select '398FB3BA-4CDE-4CD1-BA78-5F8E173838C6','c'

--查看
select * from tbA
/*
id name
------------------------------------ --------------------
ABAA3BAA-7338-4FF8-BD74-AC82986C6968 a
A2251AA2-D760-4728-ADF4-4775DECD7B9F b
398FB3BA-4CDE-4CD1-BA78-5F8E173838C6 c
*/

declare @i varchar(1000)
set @i= 'abaa3baa-7338-4ff8-bd74-ac82986c6968,a2251aa2-d760-4728-adf4-4775decd7b9f'

select count(name) from tbA where charindex(','+ltrim(id)+',',','+@i+',')>0

/*
2
*/
叶子 2012-01-31
  • 打赏
  • 举报
回复

--你这个不是转换的问题,是你的语句的问题
declare @t nvarchar(36)
set @t='abaa3baa-7338-4ff8-bd74-ac82986c6968'

select cast(@t as uniqueidentifier)
/*
ABAA3BAA-7338-4FF8-BD74-AC82986C6968
*/

haogaoxiao 2012-01-31
  • 打赏
  • 举报
回复
顺便说下id在数据库中是uniqueidentifier类型的字段

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧