【发布时间】:2014-01-12 09:05:09
【问题描述】:
我在 sql 中有一个简单的 sp,如下所示:
alter proc sptest(@val nvarchar(30))
as
select COUNT(*) from AAtable
where name = @val
当我用@val = 'مریم' 调用这个 sp 时,它运行良好并返回值。 但是当我像这样改变它时:
alter proc sptest(@val nvarchar(30))
as
declare @q nvarchar(max)
set @q = 'select COUNT(*) from AAtable where name = ' + @val
Execute(@q)
并使用相同的@val 调用它,它会将@val 值转换为“?”并返回错误。我应该说@val 来自c# 中的字符串参数。据我所知.net 将字符串转换为 nvarchar 参数形式的 sql。无论如何,我不能在@val 之前添加 N。 而且我必须进行字符串查询并执行它,所以我也不能将其更改为第一个代码。
如果我这样做:set @q = 'select COUNT(*) from AAtable where name = N''' + @val + '''' 它也不起作用。
为什么执行字符串会使我的 nvarchar 参数变为“?” !?
【问题讨论】:
标签: c# sql .net database database-design