今天看书发现
像下面的@TableName
我们在什么情况下才用到这种存储过程,表名也可动态指定? 能否举一个你们开发中的实例来说明一下,谢谢!
ALTER Proc SF3 (@TableName varchar(50))
as
Declare @Sql nvarchar(4000)
set @Sql=
'Update ' +@TableName+' set F3=b.tj
From ' + @TableName + ' a Join KQ b
on a.Year=b.Year and a.Id =b.Id
where a.Year=(select Year from TJYear)' Exec( @sql )这个表名的参数是怎样传递的?
像下面的@TableName
我们在什么情况下才用到这种存储过程,表名也可动态指定? 能否举一个你们开发中的实例来说明一下,谢谢!
ALTER Proc SF3 (@TableName varchar(50))
as
Declare @Sql nvarchar(4000)
set @Sql=
'Update ' +@TableName+' set F3=b.tj
From ' + @TableName + ' a Join KQ b
on a.Year=b.Year and a.Id =b.Id
where a.Year=(select Year from TJYear)' Exec( @sql )这个表名的参数是怎样传递的?
在存储过程中,动态SQL语句既然仅仅是参数不同,微软不建议用Exec来执行诸如此类的语句,建议用sp_executesql~以下是SQL的帮助~
替换 sp_executesql 中的参数的能力,与使用 EXECUTE 语句执行字符串相比,有下列优点: 1.因为在 sp_executesql 字符串中,Transact-SQL 语句的实际文本在两次执行之间并未改变,所以查询优化器应该能将第二次执行中的 Transact-SQL 语句与第一次执行时生成的执行计划匹配。因此,SQL Server 不必编译第二条语句。
2.Transact-SQL 字符串只生成一次。
3.整数参数按其本身格式指定。不需要转换为 Unicode。
-------------------
sql := 'exec SF3 ''params'' '