询问者
使用uniqueidentifier作为参数时存在的疑惑?

问题
-
使用uniqueidentifier出现以下的问题,在传值时必须要加单引号
存储过程调用代码:
SqlParameter[] parameters = { new SqlParameter("@RoleID", SqlDbType.UniqueIdentifier) };
parameters[0].Value = roleId ;执行后查询没有结果!
存储过程写法:
create PROCEDURE [dbo].[sp_Test]
@UserID UniqueIdentifier
ASselect * from Accounts_Users
where UserID= @UserID
执行代码:1.
DECLARE @RC int
DECLARE @UserID uniqueidentifier
SELECT @UserID = {BA88C88C-89F9-4C67-A4DF-2AE4CA48FBE6}
EXEC @RC = [SMS].[dbo].[sp_Test] @UserID
DECLARE @PrnLine nvarchar(4000)
PRINT '存储过程: SMS.dbo.sp_Test'
SELECT @PrnLine = ' 返回代码 = ' + CONVERT(nvarchar, @RC)
PRINT @PrnLine这段代码执行会报错:[Microsoft][ODBC SQL Server Driver]语法错误或违反访问规则
2.代码加单引号修改后
DECLARE @RC int
DECLARE @UserID uniqueidentifier
SELECT @UserID = ‘{BA88C88C-89F9-4C67-A4DF-2AE4CA48FBE6}’
EXEC @RC = [SMS].[dbo].[sp_Test] @UserID
DECLARE @PrnLine nvarchar(4000)
PRINT '存储过程: SMS.dbo.sp_Test'
SELECT @PrnLine = ' 返回代码 = ' + CONVERT(nvarchar, @RC)
PRINT @PrnLine就能顺利执行
- 已编辑 sjgkkk 2011年12月30日 8:07
全部回复
-
要赋值给uniqueidentifier类型字段的话,请用NEWID()
Reference:
http://msdn.microsoft.com/zh-cn/library/ms190348.aspx
- The blog of typewriter職人
- Convert C# to VB.NET
- /*If my concept is wrong ,please correct me.Thanks.*/
-
要赋值给uniqueidentifier类型字段的话,请用NEWID()
Reference:
http://msdn.microsoft.com/zh-cn/library/ms190348.aspx
- The blog of typewriter職人
- Convert C# to VB.NET
- /*If my concept is wrong ,please correct me.Thanks.*/
别误导人了,newid不是干这个用处的。文档中说得很清楚,通过从 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 形式的字符串常量进行转换,因为是字符串常量,所以要加单引号。
用SqlParameter是可以的,你其它地方没写对,没有完整代码,也不知道你错在什么地方。
想不想时已是想,不如不想都不想。- 已建议为答案 Molly Chen_Moderator 2012年1月3日 1:40
-
别误导人了,newid不是干这个用处的。文档中说得很清楚,通过从 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 形式的字符串常量进行转换,因为是字符串常量,所以要加单引号。
用SqlParameter是可以的,你其它地方没写对,没有完整代码,也不知道你错在什么地方。
想不想时已是想,不如不想都不想。
感谢怡红公子的纠正- The blog of typewriter職人
- Convert C# to VB.NET
- /*If my concept is wrong ,please correct me.Thanks.*/
-
要赋值给uniqueidentifier类型字段的话,请用NEWID()
Reference:
http://msdn.microsoft.com/zh-cn/library/ms190348.aspx
- The blog of typewriter職人
- Convert C# to VB.NET
- /*If my concept is wrong ,please correct me.Thanks.*/
别误导人了,newid不是干这个用处的。文档中说得很清楚,通过从 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 形式的字符串常量进行转换,因为是字符串常量,所以要加单引号。
用SqlParameter是可以的,你其它地方没写对,没有完整代码,也不知道你错在什么地方。
想不想时已是想,不如不想都不想。
怡红公子,你好,谢谢你的解答!现在主要问题其实不在于代码的完整问题,现在主要问题是新创建的存储过程,在SQL Server中传入这样的 {BA88C88C-89F9-4C67-A4DF-2AE4CA48FBE6}值时就会直接报错:[Microsoft][ODBC SQL Server Driver]语法错误或违反访问规则
如果传值为'{BA88C88C-89F9-4C67-A4DF-2AE4CA48FBE6}'(加单引号)后就能正确执行,
问题恰恰出在这里了程序默认传入的值时不带单引号,如何添加前后添加单引号?试验了很多方式都不行
-
你的赋值语句不正确。
建议参考官方文档:
http://msdn.microsoft.com/en-us/library/ms187942.aspx
赋值的两种形式:
DECLARE @myid uniqueidentifier = NEWID(); SELECT CONVERT(char(255), @myid) AS 'char'; DECLARE @ID nvarchar(max) = N'0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong'; SELECT @ID, CONVERT(uniqueidentifier, @ID) AS TruncatedValue;
你用{}是不行的!
DECLARE @RC int
DECLARE @UserID uniqueidentifier
SELECT @UserID = {BA88C88C-89F9-4C67-A4DF-2AE4CA48FBE6}- 已建议为答案 maco wangModerator 2012年7月7日 13:24
-
最重要的应该是这句话:
Because the uniqueidentifier type is limited to 36 characters