Sql server 在SQL中将文本转换为INT
Sql server 在SQL中将文本转换为INT,sql-server,stored-procedures,Sql Server,Stored Procedures,sm\u值是一个文本列,我需要将其转换为INT 因为只有两个人会弄乱这张桌子,所以列将是数字的(幽默我) 我收到以下错误消息: Msg 206,16级,状态2,程序用户\密码\日期\间隔\检查,第10行 操作数类型冲突:文本与int不兼容 我试过: SELECT CONVERT(INT, sm_Value)) FROM Setting_Misc 但我仍然得到了错误 IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P'
sm\u值
是一个文本
列,我需要将其转换为INT
因为只有两个人会弄乱这张桌子,所以列将是数字的(幽默我)
我收到以下错误消息:
Msg 206,16级,状态2,程序用户\密码\日期\间隔\检查,第10行操作数类型冲突:文本与int不兼容 我试过:
SELECT CONVERT(INT, sm_Value))
FROM Setting_Misc
但我仍然得到了错误
IF EXISTS (SELECT * FROM sysobjects
WHERE type = 'P' AND name = 'User_Password_Date_Interval_Check')
BEGIN
PRINT 'Dropping Procedure User_Password_Date_Interval_Check'
DROP Procedure User_Password_Date_Interval_Check
END
GO
PRINT 'Creating Procedure User_Password_Date_Interval_Check'
GO
CREATE Procedure User_Password_Date_Interval_Check
@ua_pk uniqueidentifier
AS
DECLARE @PasswordExpireDays INT
SELECT
CONVERT(INT, CONVERT(VARCHAR(MAX), sm_Value))
FROM Setting_Misc
SELECT
@PasswordExpireDays = COALESCE(sm_Value,0)
FROM
Setting_Misc AS sm
INNER JOIN
Syndicates As syn ON sm.syn_fk = syn.syn_pk
INNER JOIN
Company As c ON c.syn_fk = syn.syn_pk
INNER JOIN
User_Accounts As ua ON ua.c_fk = c.c_pk
WHERE
sm.sm_Setting = 'PasswordExpireDays'
GO
GRANT EXEC ON User_Password_Date_Interval_Check TO WEB
必须在设置变量的位置进行转换
IF EXISTS (SELECT * FROM sysobjects
WHERE type = 'P' AND name = 'User_Password_Date_Interval_Check')
BEGIN
PRINT 'Dropping Procedure User_Password_Date_Interval_Check'
DROP Procedure User_Password_Date_Interval_Check
END
GO
PRINT 'Creating Procedure User_Password_Date_Interval_Check'
GO
CREATE Procedure User_Password_Date_Interval_Check
@ua_pk uniqueidentifier
AS
DECLARE @PasswordExpireDays INT
--This conversion doesn't cascade down to the next SELECT statement
SELECT
CONVERT(INT, CONVERT(VARCHAR(MAX), sm_Value))
FROM Setting_Misc
SELECT
--Here is what has to change
--@PasswordExpireDays = COALESCE(sm_Value,0)
@PasswordExpireDays = CONVERT(INT, CONVERT(VARCHAR(MAX), sm_Value))
FROM
Setting_Misc AS sm
INNER JOIN
Syndicates As syn ON sm.syn_fk = syn.syn_pk
INNER JOIN
Company As c ON c.syn_fk = syn.syn_pk
INNER JOIN
User_Accounts As ua ON ua.c_fk = c.c_pk
WHERE
sm.sm_Setting = 'PasswordExpireDays'
GO
GRANT EXEC ON User_Password_Date_Interval_Check TO WEB
为什么要先将其转换为varchar(max)?可能重复的
@PasswordExpireDays
似乎就是您的错误所在,所以只需将其转换为@PasswordExpireDays=COALESCE(convert(INT,convert(varchar(max),sm_Value)),0)
我在另一个论坛上读到它。当然我找不到链接。我没有先把它转换成varchar就尝试过了。我也试过了CAST@dfundako,就是那个!谢谢由于这个问题,我尝试了varchar转换,在我尝试了直接转换(INT,sm_值)firstHa之后,我不会走那么远@KevinFischer,但很高兴能提供帮助,并且仅出于官方目的,它是有效的。没有错误