日期:2014-05-17  浏览次数:20548 次

在上下文中不允许使用名称“xxx”的错误
存储过程中有一语句
set @sql = N'insert into Nat(ID, IP) values (' + @C_ID + ', ' + @CJQ_IP + ' )'
存储过程语法没错的

当在查询分析器里 执行 存储过程,就报 在上下文中不允许使用名称“xxx”的错误
我这里@C_ID的变量值是 ch001,所以这里报的错是 在上下文中不允许使用名称“ch001”。。。。
这个错误网上一搜一大堆,但是在存储过程里该怎么改?




------解决方案--------------------
try this,

set @sql = N'insert into Nat(ID, IP) values(''' + @C_ID + ''', ''' + @CJQ_IP + ''')'

------解决方案--------------------
引用:
引用:try this,
SQL code?1set @sql = N'insert into Nat(ID, IP) values(''' + @C_ID + ''', ''' + @CJQ_IP + ''')'

你里面将一个单引号变成3个单引号? 请问为什么要这样?
试过以后,你的是正确的,可以正确执行。但是我想知道为什么……

values()里的值要用单引号括起来,在动态SQL里,单引号要用2个单引号表示,
再加上原先的1个单引号,所以说3个单引号.调试时可print @sql打印出来看看.
------解决方案--------------------
set @sql = N'insert into Nat(ID, IP) values(''' + @C_ID + ''', ''' + @CJQ_IP + ''')'
要用3个单引号是因为,sql语句中 两个单引号算一个字符串的单引号,比如:''''  算一个字符串单引号,''''''算两个字符串单引号。
你想理解就这样:
declare @sql varchar(100)
set @sql='''bbb'',''ccc'',''ddd'''
print @sql
你看看结果就知道了