表ruletab中的字段A,字段U,都是nvarchar类型
我想用动态SQL语句实现如下功能:
update ruletab set A = '?' where U = '1'
-----------------
动态语句如下:
/*声明变量*/
declare @U varchar(10),@delcol varchar(10),
@sql varchar(8000),@test varchar(10),@str char(1)
set @U='U'
set @delcol='A'
set @str='?'
set @test='1'
set @sql=''
set @sql='update ruletab set '+@delcol+'='+@str+' where '+@U+' = '+@test
select @sql
exec(@sql)错误:
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: '?' 附近有语法错误。
----------------------------
如果将set @str='?'改成set @str='m'错误:
服务器: 消息 207,级别 16,状态 3,行 1
列名 'm' 无效。
----------------------------
如果将set @str='?'改成set @str="?"错误:
服务器: 消息 207,级别 16,状态 3,行 6
列名 '?' 无效。
----------------------------
请问:
为什么错误?
如何才能实现:update ruletab set A = '?' where U = '1'
我想用动态SQL语句实现如下功能:
update ruletab set A = '?' where U = '1'
-----------------
动态语句如下:
/*声明变量*/
declare @U varchar(10),@delcol varchar(10),
@sql varchar(8000),@test varchar(10),@str char(1)
set @U='U'
set @delcol='A'
set @str='?'
set @test='1'
set @sql=''
set @sql='update ruletab set '+@delcol+'='+@str+' where '+@U+' = '+@test
select @sql
exec(@sql)错误:
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: '?' 附近有语法错误。
----------------------------
如果将set @str='?'改成set @str='m'错误:
服务器: 消息 207,级别 16,状态 3,行 1
列名 'm' 无效。
----------------------------
如果将set @str='?'改成set @str="?"错误:
服务器: 消息 207,级别 16,状态 3,行 6
列名 '?' 无效。
----------------------------
请问:
为什么错误?
如何才能实现:update ruletab set A = '?' where U = '1'
解决方案 »
- 安装SQL SERVER 2008失败,请教如何处理
- ACCESS 中有两个数据表,如何把一个表的数据 拷贝到 另一个表 ??
- update 触发器多条更新问题
- ***< 超难问题,希望 邹老师给答复 >*** 如何用 SQL存储过程 查询给定的ID的类别 以及它的所有孩子类 !!!!
- 求助数据库链接代码!!!!!!!!!!!!!!!!!!
- 各位帮帮我 顺便讨论一下
- 求各位老大门帮帮忙,已经发很长时间了,没有人能解决,急急 急急
- SQL7.0 的DTS Packages如何迁移?
- CrazyFor(蚂蚁)請過來領分,謝謝你,並請繼續關注
- 急!!! 请教sql7.0 中如何自动执行存储过程?
- sql里,字段的类型一个用char 一个用int,两个的值都是"123",他们所占的空间一样吗?
- 求一条MSSQL语句
@sql varchar(8000),@test varchar(10),@str char(1)
set @U='U'
set @delcol='A'
set @str='?'
set @test='1'
set @sql=''
set @sql='update ruletab set '+@delcol+'='''+@str+''' where '+@U+' = '''+@test+''''
select @sql
exec(@sql)
declare @U varchar(10),@delcol varchar(10),
@sql varchar(8000),@test varchar(10),@str char(1)
set @U='U'
set @delcol='A'
set @str='?'
set @test='1'
set @sql=''
set @sql='update ruletab set '+@delcol+'='+char(39)+@str+char(39)+' where '+@U+' = '+char(39)+@test+char(39)
select @sql
exec(@sql)
@sql varchar(8000),@test varchar(10),@str char(1)
set @U='U'
set @delcol='A'
set @str='?'
set @test='1'
set @sql=''
set @sql='update ruletab set '+@delcol+'='''+@str+''' where '+@U+' = '''+@test+''''
select @sql
exec(@sql)
declare @U varchar(10),@delcol varchar(10),
@sql varchar(8000),@test varchar(10),@str char(1)
set @U='U'
set @delcol='A'
set @str='?'
set @test='1'
set @sql=''
set @sql='update ruletab set '+@delcol+'='''+@str+''' where '+@U+' = '''+@test+''''
select @sql
exec(@sql)組合動態語句的時候,一個'用兩個''大體
set @sql='update ruletab set '+@delcol+'='+@str+' where '+@U+' = '+@test因为对字符串的比较操作,需要对字符串加上'',在动态中,也即是你的最终@sql中的结果需要有''。具体的写法是,需要其中出现一个'的就用两个'',这一点很重要!改为如下,应该可以:
set @sql='update ruletab set '+@delcol+'='''+@str+''' where '+@U+' = '''+@test+''''