/*利用存储更新用户个人通讯录信息表*/
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里面的写法不明白。
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里面的写法不明白。
--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
--另外看了下。楼主的引号用的很乱。
改后如下: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
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
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
--注意空格和引号
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'
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???
--另外看了下。楼主的引号用的很乱。
改后如下: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
--理解挺简单,,,表和字段单引号,变量三个引号,,