Sql server 如何在存储过程中添加用户标识作为uniqueidentifier数据类型?

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

我创建了一个存储过程,但当我试图使用它时,我得到了一个错误

“Msg 8114,16级,状态5,程序SP_客户_添加,第0行[批次] 起始行36]将数据类型varchar转换为 唯一标识符。”

我把这个过程称为:

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
作为变量或
INSERT

Hello@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。谢谢。我会的,谢谢你。我会做的。