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,但很高兴能提供帮助,并且仅出于官方目的,它是有效的。没有错误