积极答复者
动态参数传递

问题
-
今天在做数据比对的两张表结构相同,而数据库名字不同。例如: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'
看看大家有何看法
星光总能为我指引方向
答案
-
如果只是这个用途,直接查系统表,里面有记录行数,又快又方便。sys.partitions
想不想时已是想,不如不想都不想。
- 已建议为答案 Jacky_shen 2012年2月23日 6:23
- 已标记为答案 Molly Chen_Moderator 2012年2月27日 2:00
-
嗯,我觉得使用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)
- 已编辑 Jacky_shen 2012年2月23日 4:21
- 已标记为答案 Molly Chen_Moderator 2012年2月27日 2:00
-
或許你可以利用下列的方式來取得你要的資料。
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/- 已建议为答案 Jacky_shen 2012年2月23日 6:23
- 已标记为答案 Molly Chen_Moderator 2012年2月27日 2:00
全部回复
-
如果只是这个用途,直接查系统表,里面有记录行数,又快又方便。sys.partitions
想不想时已是想,不如不想都不想。
- 已建议为答案 Jacky_shen 2012年2月23日 6:23
- 已标记为答案 Molly Chen_Moderator 2012年2月27日 2:00
-
嗯,我觉得使用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)
- 已编辑 Jacky_shen 2012年2月23日 4:21
- 已标记为答案 Molly Chen_Moderator 2012年2月27日 2:00
-
或許你可以利用下列的方式來取得你要的資料。
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/- 已建议为答案 Jacky_shen 2012年2月23日 6:23
- 已标记为答案 Molly Chen_Moderator 2012年2月27日 2:00