/*利用存储更新用户个人通讯录信息表*/
GO
CREATE PROC UpdateUserConInfo(
@UpdateTableName varchar(20),
@UpdateCondition varchar(20),
@UpdateConName varchar(30), 
@UpdateConAddress varchar(50), 
@UpdateConPhone varchar(20), 
@UpdateConEmail varchar(40), 
@UpdateConBirthday datetime, 
@UpdateConGroup varchar(20), 
@UpdateConMark varchar(50)
)
AS
DECLARE @str_sql varchar(200)
SET @str_sql='UPDATE'+ @UpdateTableName+
'SET ConName='''+ @UpdateConName+''','''+'ConAddress='''+@UpdateConAddress+''','''+'ConPhone='''+@UpdateConPhone+''','''+'ConEmail='''+@UpdateConEmail+''','''
+'ConBirthday='''+''''+convert(char(10),@UpdateConBirthday,120)+''''+''','''+'ConGroup='''+@UpdateConGroup+''','''+'ConMark='''+@UpdateConMark+''''+
'WHERE ConName='''+@UpdateCondition+''''
GO
我就是想利用存储过程向某个表中更新数据(那个表已经存在)
执行语句如下:UpdateUserConInfo 'table1','Hi','Hello','湖北武汉','13989898888','[email protected]','1986-8-9','朋友','无备注'
可是执行语句时候也不提示错误,只是说命令已成功完成。
同时我一直对@str_sql里面的写法不明白。

解决方案 »

  1.   


    --try:CREATE PROC UpdateUserConInfo( 
    @UpdateTableName varchar(20), 
    @UpdateCondition varchar(20), 
    @UpdateConName varchar(30),  
    @UpdateConAddress varchar(50),  
    @UpdateConPhone varchar(20),  
    @UpdateConEmail varchar(40),  
    @UpdateConBirthday datetime,  
    @UpdateConGroup varchar(20),  
    @UpdateConMark varchar(50) 

    AS 
    DECLARE @str_sql varchar(200) 
    SET @str_sql='UPDATE'+ @UpdateTableName+ 
    'SET ConName='''+ @UpdateConName+''','''+'ConAddress='''+@UpdateConAddress+''','''+'ConPhone='''+@UpdateConPhone+''','''+'ConEmail='''+@UpdateConEmail+''',''' 
    +'ConBirthday='''+''''+convert(char(10),@UpdateConBirthday,120)+''''+''','''+'ConGroup='''+@UpdateConGroup+''','''+'ConMark='''+@UpdateConMark+''''+ 
    'WHERE ConName='''+@UpdateCondition+'''' 
    exec(@str_sql) --一定要加上这个
    GO 
      

  2.   


    --另外看了下。楼主的引号用的很乱。
    改后如下:CREATE PROC UpdateUserConInfo( 
    @UpdateTableName varchar(20), 
    @UpdateCondition varchar(20), 
    @UpdateConName varchar(30),  
    @UpdateConAddress varchar(50),  
    @UpdateConPhone varchar(20),  
    @UpdateConEmail varchar(40),  
    @UpdateConBirthday datetime,  
    @UpdateConGroup varchar(20),  
    @UpdateConMark varchar(50) 

    AS 
    DECLARE @str_sql varchar(200) 
    SET @str_sql='UPDATE '+ @UpdateTableName+ ' SET ConName='''+ @UpdateConName+''',ConAddress='''+@UpdateConAddress+''',
    ConPhone='''+@UpdateConPhone+''',ConEmail='''+@UpdateConEmail+''',ConBirthday='''+convert(varchar(10),@UpdateConBirthday,120)+''',ConGroup='''+@UpdateConGroup+''',ConMark='''+@UpdateConMark+'''  WHERE ConName='''+@UpdateCondition+'''' 
    exec(@str_sql)
    GO 
      

  3.   

    动态sql语句基本语法 
    1 :普通SQL语句可以用Exec执行 eg:   Select * from tableName 
             Exec('select * from tableName') 
             Exec sp_executesql N'select * from tableName'    -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg:   
    declare @fname varchar(20) 
    set @fname = 'FiledName' 
    Select @fname from tableName              -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 
    Exec('select ' + @fname + ' from tableName')     -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可 
    declare @fname varchar(20) 
    set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s)                -- 成功 
    exec sp_executesql @s   -- 此句会报错 declare @s Nvarchar(1000)  -- 注意此处改为nvarchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s)                -- 成功     
    exec sp_executesql @s   -- 此句正确 3. 输出参数 
    declare @num int, 
            @sqls nvarchar(4000) 
    set @sqls='select count(*) from tableName' 
    exec(@sqls) 
    --如何将exec执行结果放入变量中? declare @num int, 
                   @sqls nvarchar(4000) 
    set @sqls='select @a=count(*) from tableName ' 
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num 
      

  4.   


    CREATE PROC UpdateUserConInfo( 
    @UpdateTableName varchar(20), 
    @UpdateCondition varchar(20), 
    @UpdateConName varchar(30),  
    @UpdateConAddress varchar(50),  
    @UpdateConPhone varchar(20),  
    @UpdateConEmail varchar(40),  
    @UpdateConBirthday datetime,  
    @UpdateConGroup varchar(20),  
    @UpdateConMark varchar(50) 

    AS 
    DECLARE @str_sql varchar(200) 
    SET @str_sql='UPDATE'+ @UpdateTableName+ 
    'SET ConName='''+ @UpdateConName+''','''+'ConAddress='''+@UpdateConAddress+''','''+'ConPhone='''+@UpdateConPhone+''','''+'ConEmail='''+@UpdateConEmail+''',''' 
    +'ConBirthday='''+''''+convert(char(10),@UpdateConBirthday,120)+''''+''','''+'ConGroup='''+@UpdateConGroup+''','''+'ConMark='''+@UpdateConMark+''''+ 
    'WHERE ConName='''+@UpdateCondition+'''' 
    exec(@str_sql) --加上运行
    GO 
      

  5.   

    如果要加 单引号  这样来  + char(39)+
      

  6.   


    --注意空格和引号
    alter  PROC UpdateUserConInfo( 
    @UpdateTableName varchar(20), 
    @UpdateCondition varchar(20), 
    @UpdateConName varchar(30),  
    @UpdateConAddress varchar(50),  
    @UpdateConPhone varchar(20),  
    @UpdateConEmail varchar(40),  
    @UpdateConBirthday datetime,  
    @UpdateConGroup varchar(20),  
    @UpdateConMark varchar(50) 

    AS 
    DECLARE @str_sql varchar(200) 
    SET @str_sql='UPDATE '+ @UpdateTableName+ 
    ' SET ConName='''+ @UpdateConName+''',ConAddress='''+@UpdateConAddress+''',ConPhone='''+@UpdateConPhone+''',ConEmail='''+@UpdateConEmail+''',
    ConBirthday='''+convert(char(10),@UpdateConBirthday,120)+''',ConGroup='''+@UpdateConGroup+''',ConMark='''+@UpdateConMark+''''+ 
    '  WHERE ConName='''+@UpdateCondition+'''' 
    Exec(@str_sql)
    GO UpdateUserConInfo 'table1','Hi','Hello','湖北武汉','13989898888','[email protected]','1986-8-9','朋友','无备注' UPDATE table1 SET ConName='Hello',ConAddress='湖北武汉',ConPhone='13989898888',ConEmail='[email protected]',
    ConBirthday='1986-08-09',ConGroup='朋友',ConMark='无备注'  WHERE ConName='Hi'
      

  7.   


    GO 
    CREATE PROC UpdateUserConInfo( 
    @UpdateTableName varchar(20), 
    @UpdateCondition varchar(20), 
    @UpdateConName varchar(30),  
    @UpdateConAddress varchar(50),  
    @UpdateConPhone varchar(20),  
    @UpdateConEmail varchar(40),  
    @UpdateConBirthday datetime,  
    @UpdateConGroup varchar(20),  
    @UpdateConMark varchar(50) 

    AS 
    DECLARE @str_sql varchar(200) 
    SET @str_sql='UPDATE'+ @UpdateTableName+ 
    'SET ConName='+ char(39)+ @UpdateConName+ char(39)+ ','+'ConAddress='+ char(39)+@UpdateConAddress++ char(39)+','+'ConPhone='+char(39)+ @UpdateConPhone+char(39)+','+ char(39)+'ConEmail='+ char(39)+@UpdateConEmail+char(39)+',' + 
    +'ConBirthday='+ char(39)+convert(char(10),@UpdateConBirthday,120)
    + char(39)+','
    + 'ConGroup='+ char(39)+@UpdateConGroup+ char(39)+','
    + 'ConMark='+ char(39)+@UpdateConMark + char(39) + '  ' + 
    'WHERE ConName='+ char(39)+@UpdateCondition+ char(39)
    GO 
    OK???
      

  8.   

    --学习
    --另外看了下。楼主的引号用的很乱。
    改后如下:CREATE PROC UpdateUserConInfo( 
    @UpdateTableName varchar(20), 
    @UpdateCondition varchar(20), 
    @UpdateConName varchar(30),  
    @UpdateConAddress varchar(50),  
    @UpdateConPhone varchar(20),  
    @UpdateConEmail varchar(40),  
    @UpdateConBirthday datetime,  
    @UpdateConGroup varchar(20),  
    @UpdateConMark varchar(50) 

    AS 
    DECLARE @str_sql varchar(200) 
    SET @str_sql=
    'UPDATE '+ @UpdateTableName+ ' SET ConName='''+ @UpdateConName+''',ConAddress='''+@UpdateConAddress+''',
    ConPhone='''+@UpdateConPhone+''',ConEmail='''+@UpdateConEmail+''',ConBirthday='''+convert(varchar(10),@UpdateConBirthday,120)+''',ConGroup='''+@UpdateConGroup+''',
    ConMark='''+@UpdateConMark+'''  WHERE ConName='''+@UpdateCondition+'''' 
    exec(@str_sql)
    GO 
    --理解挺简单,,,表和字段单引号,变量三个引号,,