【问题标题】:sp_executesql gives unclosed quotation mark error?sp_executesql 给出未闭合的引号错误?
【发布时间】:2014-05-16 02:58:39
【问题描述】:

我已经编写了简单的存储过程并使用 sp_executesql 执行以解决引号错误和 sql 注入,但是当我在参数中传递单引号时,它仍然显示Unclosed quotation mark after the character string ''.

alter procedure dbo.quote_test
(
    @quoteid int
)
as
begin
declare @sqlstring as nvarchar(max)
declare @paramdef as nvarchar(100)
set @sqlstring = 'select * from quote where quote_id = @quoteid';
set @paramdef = N'@quoteid int';
exec sp_executesql @sqlstring,@paramdef, @quoteid
end

exec dbo.quote_test 10'

【问题讨论】:

  • 此页面在 Google 搜索中排名靠前...您能否选择以下哪项回答了问题...或告诉我们您的解决方案?

标签: sql sql-server sql-server-2008 sp-executesql


【解决方案1】:

我不确定您要完成什么,但存储过程需要一个整数作为参数。因此,这将起作用:

exec dbo.quote_test 10

这应该不起作用:

exec dbo.quote_test 'abc'

【讨论】:

  • 但是如果我将字符串作为参数 sp_execute 会转义它呢?
  • 像这个 exec dbo.quote_test '10'' 给出报价错误。
  • 看起来你已经定义了你的函数来接受一个 INT 作为参数。就像@Gordon 说的那样,您需要将其作为 INT 而不是在引号内传递 -> '10'
  • @MatthewatCriticalCognition 。 . .好吧,如果你传入'10',那么 SQL Server 可能会将其转换为 int。如果你传入'10a',你应该会得到一个错误。
  • @GordonLinoff - 你是对的。 mr_eclair - 我认为你的问题可能是你有一个单引号来开始你的参数,但是一个双引号或双引号来结束它。
【解决方案2】:

可能是由于您的 EXEC 语句有引号。

执行 dbo.quote_test 10'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 2017-12-19
    • 2015-01-25
    相关资源
    最近更新 更多