none
动态参数传递 RRS feed

  • 问题

  • 今天在做数据比对的两张表结构相同,而数据库名字不同。例如:use  testdb   下有35张表 use ntdb 下有35张表。目前需要每天都要对比 TESTDB下35张表 和 ntdb下的35张表去比对数据量,如果一致提示“一致”如果发现某些表不一致则提出,不一致的数据存储到另外一张记录表里面。现在我写道这里就不知道参数怎么能继续传递下去

    declare @i int

    delcare @j int

    DELCARE @NAME NVARCHAR(15)

     SET @I=EXEC('SELECT COUNT(1) FROM NTDB.DBO.' + @NAME)

     SET @j= EXEC(‘SELECT COUNT(1)FROM  TESTDB.DBO.’ + @NAME ) --@NAME 是通过游标获取的这里我就略写关于游标获遍历数据存储在@Name

    这么写是不对的? 但是怎么能获取这里的值呢

     之后想获取这里的记录总数传递给下一个

    IF @I=@J

     PRINT 'SSS'

    ELSE

     PRINT 'ERROR'

    看看大家有何看法


    星光总能为我指引方向

    2012年2月23日 2:35

答案

  • 如果只是这个用途,直接查系统表,里面有记录行数,又快又方便。sys.partitions


    想不想时已是想,不如不想都不想。

    2012年2月23日 3:53
    版主
  • 嗯,我觉得使用sys.partitions 是个不错的主意,如果你非要用动态SQL 来做的话,可以用下面的语句。



    IF object_id('tempdb..#temp1') IS NOT NULL
    DROP TABLE tempdb..#temp1
    GO
    declare @i int
    declare @j int  
    create   table  #temp1(a   int)

    declare @NAME NVARCHAR(15)
    declare @SQLSTRING NVARCHAR(500)

    SET @SQLSTRING =' SELECT COUNT(1) FROM TESTDB.DBO.'+ @NAME
    insert  #temp1 EXEC(@SQLSTRING)
    SELECT @j= (select COUNT(*) from #temp1)
     

    2012年2月23日 4:20
  • 或許你可以利用下列的方式來取得你要的資料。

    use Northwind
    go
    
    declare @sql  nvarchar(max) = N'select @cnt = count(1) from region'
    declare @parm nvarchar(max) = '@cnt int output'
    declare @count int
    exec	sp_executesql @sql,@parm,@cnt = @count output
    
    select @count
    


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年2月23日 4:55

全部回复

  • 如果只是这个用途,直接查系统表,里面有记录行数,又快又方便。sys.partitions


    想不想时已是想,不如不想都不想。

    2012年2月23日 3:53
    版主
  • 嗯,我觉得使用sys.partitions 是个不错的主意,如果你非要用动态SQL 来做的话,可以用下面的语句。



    IF object_id('tempdb..#temp1') IS NOT NULL
    DROP TABLE tempdb..#temp1
    GO
    declare @i int
    declare @j int  
    create   table  #temp1(a   int)

    declare @NAME NVARCHAR(15)
    declare @SQLSTRING NVARCHAR(500)

    SET @SQLSTRING =' SELECT COUNT(1) FROM TESTDB.DBO.'+ @NAME
    insert  #temp1 EXEC(@SQLSTRING)
    SELECT @j= (select COUNT(*) from #temp1)
     

    2012年2月23日 4:20
  • 或許你可以利用下列的方式來取得你要的資料。

    use Northwind
    go
    
    declare @sql  nvarchar(max) = N'select @cnt = count(1) from region'
    declare @parm nvarchar(max) = '@cnt int output'
    declare @count int
    exec	sp_executesql @sql,@parm,@cnt = @count output
    
    select @count
    


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年2月23日 4:55