分享

SQL语句临时表、表变量注意事项(解决游标性能)

 worlddust 2013-04-24

SQL语句临时表、表变量注意事项(解决游标性能)  

2009-07-23 14:07:51|  分类: Sql |字号 订阅

   --注意一:用此方法替代游标的方法,可以提高性能

  --注意二:只有使用全局临时表(##MYTALE),才能在动态语句和静态语句中配合使用,

  --如下语句改为#MYTALE将报:"对象名 '#MYTALE' 无效。"的错误信息

  DECLARE   @S   VARCHAR(8000),@SQL   NVARCHAR(4000)  

  SET   @S='A;B;C;D;E;F;G;H;I;J;K'  

  SET   @SQL='SELECT '''+ REPLACE(@S,';',''' COL UNION ALL SELECT ''')+''' COL'  

  PRINT @SQL

  SET   @SQL='SELECT * INTO  ##MYTALE FROM  ('+@SQL+') T' 

  PRINT @SQL

  EXEC   SP_EXECUTESQL   @SQL  

  SELECT   COL   FROM   ##MYTALE 

  DROP   TABLE   ##MYTALE

 

 

  --以下方式也用与解决动态语句和静态语句共享临时表的一种方法

  DECLARE   @S  VARCHAR(8000),@SQL  NVARCHAR(4000)  

  CREATE TABLE #MYTALE (COL NVARCHAR(20)) 

  SET   @S='A;B;C;D;E;F;G;H;I;J;K'  

  SET   @SQL='SELECT '''+ REPLACE(@S,';',''' COL UNION ALL  SELECT ''')+''' COL'  

  PRINT @SQL

  SET   @SQL='INSERT INTO #MYTALE SELECT * FROM ('+@SQL+') T' 

  PRINT @SQL

  EXEC   SP_EXECUTESQL   @SQL  

  SELECT   COL   FROM   #MYTALE 

  DROP  TABLE   #MYTALE

 

 

 

  --注意一:使用表变量千万不能使用DROP  TABLE   @MYTALE语句,因为表变量的生命周期就跟定义的字段一样

  --注意二:动态语句中无法使用到动态语句外面定义的变量,除非是全局的,而全局的又只能使用##

  DECLARE   @S  VARCHAR(8000),@SQL  NVARCHAR(4000)  

  DECLARE @MYTALE TABLE(COL NVARCHAR(20))  

  SET   @S='A;B;C;D;E;F;G;H;I;J;K'  

  SET   @SQL='SELECT '''+ REPLACE(@S,';',''' COL UNION ALL  SELECT ''')+''' COL'  

  PRINT @SQL

  SET   @SQL='INSERT INTO @MYTALE SELECT * FROM ('+@SQL+') T' 

  PRINT @SQL

  EXEC   SP_EXECUTESQL   @SQL  

  SELECT  COL  FROM   @MYTALE 

  --DROP  TABLE   @MYTALE

 

 

 

  --以下方式无误

  DECLARE @MYTALE TABLE(COL NVARCHAR(20))  

  BEGIN

  INSERT INTO @MYTALE SELECT *   FROM   (SELECT 'A' COL UNION ALL  SELECT 'B' COL UNION ALL  SELECT 'C' COL UNION ALL  SELECT 'D' COL UNION ALL  SELECT 'E' COL UNION ALL  SELECT 'F' COL UNION ALL  SELECT 'G' COL UNION ALL  SELECT 'H' COL UNION ALL  SELECT 'I' COL UNION ALL  SELECT 'J' COL UNION ALL  SELECT 'K' COL)   T

  SELECT * FROM  @MYTALE

  END

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多