我的动态 SQL 查询有什么问题?使用 char 数据类型

What is wrong with my dynamic SQL Query? Using a char data type(我的动态 SQL 查询有什么问题?使用 char 数据类型)
本文介绍了我的动态 SQL 查询有什么问题?使用 char 数据类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

如果我们包含 AND HostApplication 子句,此查询将不起作用.

This query will not work if we include the AND HostApplication clause.

参数:

ALTER PROCEDURE [dbo].[updateNumbers_ArchiveDB]
(
   @accountNumber varchar(50),
   @accountType char(4),
   @padding varchar(50),
   @proc_dateStart datetime,
   @proc_dateEnd datetime
)

这是动态 SQL:

set @q = 'Update ' + @cTableName +
     ' SET LogicalAccount = '+ @padding + @accountNumber +
     ' WHERE ProcessDate BETWEEN CAST('''+CONVERT(VARCHAR(20),@proc_dateStart)+''' AS DATE) AND CAST('''+CONVERT(VARCHAR(20),@proc_dateEnd)+''' AS DATE)' +
     ' AND HostApplication =' + '''+ @accountType +'''

这是我的执行声明:

exec updateNumbers_ArchiveDB @accountNumber = N'1020',
                             @accountType = N'd',
                             @padding = N'123',
                             @proc_dateStart = '2014-01-30',
                             @proc_dateEnd = '2014-01-31'

如果我删除 @accounttype 周围的单引号:(''+@accounttype +'') 我得到这个错误:

If I remove a single quote around @accounttype: (''+@accounttype +'') I get this error:

消息 207,级别 16,状态 1,第 1 行
无效的列名d".

Msg 207, Level 16, State 1, Line 1
Invalid column name 'd'.

使用 3 个引号,它可以正常运行而不会出错,但不会进行任何更新.

With 3 quotes it works runs without error, but no updates are made.

使用 1 个引号 (('+@accounttype +')) 我得到:

With 1 quote (('+@accounttype +')) I get:

消息 137,级别 15,状态 2,第 1 行
必须声明标量变量@accountType".

Msg 137, Level 15, State 2, Line 1
Must declare the scalar variable "@accountType".

我意识到在动态 SQL 中使用引号是一门艺术,但我没有找到任何关于在动态 SQL 中使用 char 数据类型的资源.

I realize there is an art to using quotes in dynamic SQL, but I have not found any resources on using the char data type in dynamic SQL.

推荐答案

+ ''''+ @accountType +''''

应该修复它

这篇关于我的动态 SQL 查询有什么问题?使用 char 数据类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Convert varchar to float IF ISNUMERIC(将 varchar 转换为 float IF ISNUMERIC)
multi part identifier could not be bound sql(无法绑定多部分标识符 sql)
Any benefit to explicitly dropping local temporary tables at the end of a stored procedure?(在存储过程结束时显式删除本地临时表有什么好处?)
Check if a column contains text using SQL(使用 SQL 检查列是否包含文本)
Select value if condition in SQL Server(SQL Server 中的条件选择值)
Control flow in T-SQL SP using IF..ELSE IF - are there other ways?(使用 IF..ELSE IF 在 T-SQL SP 中控制流 - 还有其他方法吗?)