加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

将nvarchar转换为int的动态SQL错误

发布时间:2020-12-12 16:23:13 所属栏目:MsSql教程 来源:网络整理
导读:我在动态SQL中创建了一个具有select语句的过程,代码如下所示: ALTER PROCEDURE cagroup ( @DataID INT,@days INT,@GName VARCHAR(50),@T_ID INT,@Act BIT,@Key VARBINARY(16))ASBEGIN DECLARE @SQL NVARCHAR(MAX) DECLARE @SchemaName SYSNAME DECLARE @Tabl
我在动态SQL中创建了一个具有select语句的过程,代码如下所示:
ALTER PROCEDURE cagroup    (
    @DataID INT,@days INT,@GName VARCHAR(50),@T_ID INT,@Act BIT,@Key VARBINARY(16)
)
AS
BEGIN
    DECLARE @SQL NVARCHAR(MAX)
    DECLARE @SchemaName SYSNAME
    DECLARE @TableName SYSNAME
    DECLARE @DatabaseName SYSNAME
    DECLARE @BR CHAR(2)
    SET @BR = CHAR(13) + CHAR(10)

    SELECT  @SchemaName = Source_Schema,@TableName = Source_Table,@DatabaseName = Source_Database
    FROM    Source
    WHERE   ID = @DataID

SET @SQL =  'SELECT ' + @GName + ' AS GrName,' + @BR
                + @T_ID + ' AS To_ID,' + @BR
                + @DataID + ' AS DataSoID,' + @BR
                + @Act + ' AS Active,' + @BR
                + Key + ' AS key' + @BR
                + 'R_ID AS S_R_ID' + @BR
                + 'FROM' + @DatabaseName + '.'
                + @SchemaName + '.'
                + @TableName + ' t' + @BR
                + 'LEFT OUTER JOIN Gro g ON g.GName = '
                    + @GName + @BR + 'AND g.Data_ID] =' + @DataID + @BR
                    + 't.[I_DATE] > GETDATE() -' + @days + @BR
                    + 'g.GName IS NULL
                        AND ' + @GName + ' IS NOT NULL
                        AND t.[Act] = 1' + @BR

    PRINT (@SQL)
END

当我使用此语句执行此过程时:

Exec  dbo.cagroup  1,10,'[Gro]',1,NULL

我收到以下错误.

Msg 245,Level 16,State 1,Procedurecagroup,Line 33
Conversion failed when converting the nvarchar value ‘SELECT [Gro] AS GName,
‘ to data type int.

我哪里做错了?

解决方法

您需要在串联中将所有数字CAST到nvarchar.

没有隐式的VBA样式转换为字符串.在SQL Server中,数据类型优先级意味着整数高于nvarchar:因此整个字符串都尝试将CAST转换为int.

SET @SQL =  'SELECT ' + @GName + ' AS GrName,' + @BR
              + CAST(@T_ID AS nvarchar(10)) + ' AS To_ID,' ...

编辑:A有一个好点:注意NULL!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读