jyk1970() ,那两个''是什么呢?什么时候用一个,when use 2,when use 3?
用循環吧;DECLARE @numI numeric(6) DECLARE @numCount numeric(6) DECLARE @numCurId numeric(6)--考慮id可能斷號,借@numCurId處理 SET @numI=0 SELECT @numCount=COUNT(*),@numCurId=ISNULL(MIN(id),0)-1 FROM tableWHILE (@numI<@numCount) BEGIN SELECT TOP 1 @numCurId=A.id , ... WHERE A.id>@numCurId FROM table ORDER BY A.id
execute sp_executesql @tab_sql,N'@col_11 varchar(20),@col_21 numeric(18,2)',@col_1,@col_2 --#2
你那样不行啊,它回要求我必须声明变量@col_11、@col_21
DECLARE @numCount numeric(6)
DECLARE @numCurId numeric(6)--考慮id可能斷號,借@numCurId處理
SET @numI=0
SELECT @numCount=COUNT(*),@numCurId=ISNULL(MIN(id),0)-1 FROM tableWHILE (@numI<@numCount)
BEGIN
SELECT TOP 1 @numCurId=A.id , ...
WHERE A.id>@numCurId
FROM table
ORDER BY A.id
你的處理過程
...
SET @numI=@numI+1
END
1、你试了吗?我最怕没试就说不行,注意 #1处的相应修改
2、不用游标不是更简单?
你上面描述的我做过测试,确实不行,i do it as:set @tab_sql=N'exec(''insert into table_2 (col_1,col_2) values (@col_11,@col_21)'')'
execute sp_executesql @tab_sql,N'@col_11 varchar(20),@col_21 numeric(18,2)',@col_1,@col_2 --#2你会问我为什么非这么用,因为我实际应用中那个table_2表名也是动态传递变量过来的,因此我只好如此
execute sp_executesql @tab_sql,N'@col_11 varchar(20),@col_21 numeric(18,2)',@col_1,@col_2 --#2你可以按你的情况改我写的语句,但是如果不行,请检查你自己改的部分,而不要太早下结论,因为本CEO回答技术问题所用的SQL语句都是根据测试结果或者以前测试过的经验的。
execute sp_executesql @tab_sql,N'@col_11 varchar(20),@col_21 numeric(18,2)',@col_1,@col_2 --#2
更要命的是,效率也比一般的差
建议,动态SQL用于学习可以,不要用到实际应用中,除非确实有把握(有把握能读懂,有把握效率不低)
declare @l_sql varchar(4000)
select @l_sql='backup database test to disk=''' + 'c:\' + convert(char(8), getdate(), 112) + '.bak'''
exec (@l_sql)--执行完后,@l_sql中的内容如下:
backup database test to disk='c:\20040406.bak'