You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在T-SQL中为动态字符串变量值正确包裹双引号

解决方案

首先强烈建议优先使用参数化查询,这是最安全的实现方式,既可以彻底避免SQL注入风险,也不需要手动处理字符串转义问题,代码示例如下:

var examNumber = testExamData.examDetails.examNumber;
con = new SqlConnection(connectionString);
con.Open();
// SQL语句直接用参数占位
cmd = new SqlCommand(@"UPDATE [dbo].[Exams_Data] SET [Exam_Date] = DATEADD(DAY, +90, GETDATE())
WHERE [Status_ID] = 2 AND [Exam_Number] = @ExamNumber", con);
// 给参数赋值,自动处理数据类型和转义逻辑
cmd.Parameters.AddWithValue("@ExamNumber", examNumber);
dr = cmd.ExecuteReader();

若确实需要手动拼接字符串实现需求

你原来的代码中@""表示逐字字符串格式的空字符串,所以不会输出双引号。如果要输出双引号包裹变量,有两种正确写法:

  1. 逐字字符串写法(@开头):两个连续双引号代表输出一个双引号,修改为:
"WHERE [Status_ID] = 2 AND [Exam_Number] = " + @"""" + examNumber + @""""
  1. 普通字符串写法:用反斜杠转义双引号:
"WHERE [Status_ID] = 2 AND [Exam_Number] = \"" + examNumber + "\""

注意:SQL Server默认开启QUOTED_IDENTIFIER配置,此时双引号会被识别为数据库对象标识符(如表名、列名),不会被识别为字符串值。如果要使用双引号包裹字符串,需要先执行SET QUOTED_IDENTIFIER OFF,更稳妥的通用方案是改用单引号包裹字符串,对应调整拼接写法即可。

内容的提问来源于stack exchange,提问作者StackTrace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 05:36:07