将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 我收到以下错误.
我哪里做错了? 解决方法您需要在串联中将所有数字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! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Redis基本知识、安装、部署、配置笔记
- sql-server – SQL Server 2K / 2K5 / 2K8和固态磁盘:具体
- sql-server – 在SQL Server 2012中获取总计数以及分页的更
- hyper-v – Hyper V 2012和SQL Cluster Live迁移
- 如何从一个变量运行一个超过8000个字符的SQL语句?
- sql – ALTER语句:为什么VARCHAR2(50 BYTE)而不是VARCHAR2
- 使用DBUtils连接Sqlserver插入失败的问题
- tsql – SQL将行转换为列
- SQLSERVER数据集合的交、并、差集运算(intersect,union,exc
- SQL 查询性能优化 解决书签查找