今天看书发现
像下面的@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 )这个表名的参数是怎样传递的?

解决方案 »

  1.   

    当需要对有规律的表名中的数据进行处理时会用到~
    在存储过程中,动态SQL语句既然仅仅是参数不同,微软不建议用Exec来执行诸如此类的语句,建议用sp_executesql~以下是SQL的帮助~
    替换 sp_executesql 中的参数的能力,与使用 EXECUTE 语句执行字符串相比,有下列优点: 1.因为在 sp_executesql 字符串中,Transact-SQL 语句的实际文本在两次执行之间并未改变,所以查询优化器应该能将第二次执行中的 Transact-SQL 语句与第一次执行时生成的执行计划匹配。因此,SQL Server 不必编译第二条语句。
    2.Transact-SQL 字符串只生成一次。
    3.整数参数按其本身格式指定。不需要转换为 Unicode。
      

  2.   

    建议写SQL Statement Or Stored procedure 时多看一下执行计划~
      

  3.   

    这个表名的参数是怎样传递的?
    -------------------
    sql := 'exec SF3 ''params'' '   
      

  4.   

    能否举一个你们用delphi开发中的实例来说明一下,谢谢