Sql server 如何在存储过程中添加用户标识作为uniqueidentifier数据类型?
我创建了一个存储过程,但当我试图使用它时,我得到了一个错误 “Msg 8114,16级,状态5,程序SP_客户_添加,第0行[批次] 起始行36]将数据类型varchar转换为 唯一标识符。” 我把这个过程称为:Sql server 如何在存储过程中添加用户标识作为uniqueidentifier数据类型?,sql-server,Sql Server,我创建了一个存储过程,但当我试图使用它时,我得到了一个错误 “Msg 8114,16级,状态5,程序SP_客户_添加,第0行[批次] 起始行36]将数据类型varchar转换为 唯一标识符。” 我把这个过程称为: exec SP_Customer_Add 'Cem', 'Yücel', '1234567891234567', '1111','Malatya', '1999/12/5', 'Cemyucel@yahoo.com', '54
exec SP_Customer_Add
'Cem',
'Yücel',
'1234567891234567',
'1111','Malatya',
'1999/12/5',
'Cemyucel@yahoo.com',
'5421234312',
10000
调用过程SP\u Customer\u Add时,您没有传递参数(@UserID)的值
exec SP_Customer_Add
'Cem',
'Yücel',
'1234567891234567',
'1111','Malatya',
'1999/12/5',
'Cemyucel@yahoo.com',
'5421234312',
10000
以下是修改后的程序:
alter proc SP_Customer_Add
(
@Firstname nvarchar(30),
@Surname nvarchar(30),
@CardNumber nvarchar(16),
@Password nvarchar(4),
@City nvarchar(13),
@Birthdate smalldatetime,
@Email nvarchar(30),
@PhoneNumber nvarchar (10),
@Balance money
)
as
begin
set nocount on;
DECLARE @UserID uniqueidentifier
SET @UserID = NEWID()
insert into Customers ([UserID],[Firstname], [Surname], [CardNumber], [Password], [City], [Birthdate], [Email], [PhoneNumber], [Balance] )
values
(
@UserID,
@Firstname,
@Surname,
@CardNumber,
@Password,
@City,
@Birthdate,
@Email ,
@PhoneNumber ,
@Balance
)
END
调用过程SP\u Customer\u Add时,您没有传递参数(@UserID)的值
exec SP_Customer_Add
'Cem',
'Yücel',
'1234567891234567',
'1111','Malatya',
'1999/12/5',
'Cemyucel@yahoo.com',
'5421234312',
10000
以下是修改后的程序:
alter proc SP_Customer_Add
(
@Firstname nvarchar(30),
@Surname nvarchar(30),
@CardNumber nvarchar(16),
@Password nvarchar(4),
@City nvarchar(13),
@Birthdate smalldatetime,
@Email nvarchar(30),
@PhoneNumber nvarchar (10),
@Balance money
)
as
begin
set nocount on;
DECLARE @UserID uniqueidentifier
SET @UserID = NEWID()
insert into Customers ([UserID],[Firstname], [Surname], [CardNumber], [Password], [City], [Birthdate], [Email], [PhoneNumber], [Balance] )
values
(
@UserID,
@Firstname,
@Surname,
@CardNumber,
@Password,
@City,
@Birthdate,
@Email ,
@PhoneNumber ,
@Balance
)
END
如果插入带有GUID的行,则让RDBMS处理生成。我假设ID也是聚集索引,因此将其更改为具有默认值:
ALTER TABLE dbo.Customers ADD CONSTRAINT DF_UserID DEFAULT NEWSEQUENTIALID() FOR UserID;
然后
删除您的SP并使用名称Customer\u Add
重新创建它(因为正如我的评论所说,使用前缀是一个问题),然后重新创建SP,而不将UserID
作为变量引用,或者如果插入带有GUID的行,则使用RDBMS处理生成。我假设ID也是聚集索引,因此将其更改为具有默认值:
ALTER TABLE dbo.Customers ADD CONSTRAINT DF_UserID DEFAULT NEWSEQUENTIALID() FOR UserID;
然后删除您的SP,并使用名称Customer_Add
重新创建它(因为正如我的评论所说,前缀是一个问题),然后重新创建SP,而不将UserID
作为变量或INSERTHello@BarşTunar作为变量引用,您可以与我们共享您使用的数据库吗?Oracle、MySQL还是其他什么?谢谢我使用的是SQL.Hi@BarışTunar,这是不正确的。这是一种语言(结构化查询语言)。我想您正在使用SQL Server。是的。SQL Server。我很抱歉。我是新手^^^小心,sp_
由Microsoft保留,表示特殊过程(非存储过程)。使用sp
前缀会对性能产生负面影响,如果使用该名称的特殊过程,则存储过程可能会突然停止工作。您好@BarışTuner,您能和我们分享一下您使用的数据库吗?Oracle、MySQL还是其他什么?谢谢我使用的是SQL.Hi@BarışTunar,这是不正确的。这是一种语言(结构化查询语言)。我想您正在使用SQL Server。是的。SQL Server。我很抱歉。我是新手^^^小心,sp_
由Microsoft保留,表示特殊过程(非存储过程)。使用sp
前缀会对性能产生负面影响,如果使用该名称的特殊过程,则存储过程可能会突然停止工作。虽然这会告诉OP他们为什么会出错,但这并不能解决问题。(UserID)是主键。我需要做什么?希望有了这个解决方案,UserID
不是你的聚集索引
@BarışTunar。虽然这告诉OP他们为什么会出错,但它并不能解决问题。(UserID)是主键。我需要做什么?希望有了这个解决方案,UserID
不是你的聚集索引
@BarışTunar。谢谢。我会的,谢谢你。我会做的。