【问题标题】:calling stored procedure with apostrophe in argument doesn't work在参数中调用带有撇号的存储过程不起作用
【发布时间】:2011-04-21 02:20:43
【问题描述】:

我有一个 C# 应用程序,它的部分工作是将 Excel 文件中的所有数据插入数据库。

从 Excel 获取数据的工作没问题,我正在使用存储过程将数据插入到 DB 中的表中。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Procedure [dbo].[sp_Insert]

@id int,
@brand nvarchar(50),
@model nvarchar(50),
@prodNumber nvarchar(50),
@category nvarchar(50),
@local nvarchar(50)

AS
INSERT INTO Tbl_Registos (ID, Brand, Model, [Product Number], Category, Local)
VALUES (@id, @brand, @model, @prodNumber, @category, @local)

这是 SP 完美运行的一个示例:

sp_Insert N'1', N'Brand example', N'ABC123', N'123456-7890', 
          N'Laptop', N'18'

当我遇到这样的情况时,问题就来了:

sp_Insert N'1', N'Brand example', N'ABC123', N'123456-7890',
          N'Laptop', N'Director's floor'

当我在论点中间有这个' 时。我想用引号 [],但如果我有整数,我不能把它们放在引号之间。

在我从 Excel 中获取一行后,我使用循环将参数放入作为查询的字符串中。

【问题讨论】:

  • 我知道你已经得到了一个公认的答案,这肯定会奏效,但我很想看看你是如何称呼 SP 的。如果您对 SqlCommand 对象使用参数,则会自动处理转义。你真的不想开始为逃避不必要的争论承担责任。
  • 您应该避免使用 sp_ 前缀命名存储的过程 - SQL Server 将在您的实际数据库之前搜索主数据库中的此类过程,因此如果 MS 在以后添加一个新的 sp_ 过程,您的调用代码将被破坏。

标签: sql sql-server tsql


【解决方案1】:

您可以通过在其前面放置另一个 ' 来转义输入中的 ' 并且插入将起作用。您可以执行此操作,也可以解析此类字符的数据并忽略它们。所以你的插入语句与这个转义将是:

sp_Insert N'1', N'Brand example', N'ABC123', N'123456-7890', N'Laptop', N'Director''s floor'

【讨论】:

    猜你喜欢
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    相关资源
    最近更新 更多