查看: 1026|回复: 18
|
疑问,sql 2000 query
[复制链接]
|
|
DECLARE @SQL AS VARCHAR(1000),
@TERM_ID AS CHAR
SET @ID = 'G001' -- CHANGE ID
SET @SQL = 'DELETE FROM OPENROWSET(''MSDASQL'',''DRIVER={SQL Server};SERVER='+ @ID +';UID=sa; PWD='', POSDB.dbo.PSOPER)'
EXEC(@SQL)
SET @SQL = 'INSERT OPENROWSET(''MSDASQL'',''DRIVER={SQL Server};SERVER='+ @ID +';UID=sa; PWD='', POSDB.dbo.PSOPER)
SELECT * FROM PBOPER'
EXEC(@SQL)
* 如果我一次做完从G001到G100, 要怎样用以上的query来做?* |
|
|
|
|
|
|
|
发表于 20-9-2006 12:26 AM
|
显示全部楼层
|
|
|
|
|
|
|

楼主 |
发表于 21-9-2006 12:29 PM
|
显示全部楼层
原帖由 Immortal 于 20-9-2006 12:26 AM 发表
用 WHILE LOOP 来稿定
可以教教小弟吗? |
|
|
|
|
|
|
|
发表于 21-9-2006 02:40 PM
|
显示全部楼层
要做到这个不难.
建议你先参考 T-SQL 的 Cursor, Fetch Next, 看了这些应该会有头绪了.  |
|
|
|
|
|
|
|

楼主 |
发表于 21-9-2006 03:43 PM
|
显示全部楼层
原帖由 goatstudio 于 21-9-2006 02:40 PM 发表
要做到这个不难.
建议你先参考 T-SQL 的 Cursor, Fetch Next, 看了这些应该会有头绪了.
哪里有的看啊?  |
|
|
|
|
|
|
|
发表于 21-9-2006 04:52 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 21-9-2006 06:08 PM
|
显示全部楼层
原帖由 panic_tee 于 21-9-2006 03:43 PM 发表
哪里有的看啊?
Query Aanalyzer -> Transaction SQL Help |
|
|
|
|
|
|
|

楼主 |
发表于 21-9-2006 06:25 PM
|
显示全部楼层
原帖由 goatstudio 于 21-9-2006 06:08 PM 发表
Query Aanalyzer -> Transaction SQL Help
看过了.....还是不太明白.....怎办?
我要把'G001' loop 到 'G100', 好让我把这:
SET @SQL = 'DELETE FROM OPENROWSET(''MSDASQL'',''DRIVER={SQL Server};SERVER='+ @ID +';UID=sa; PWD='', POSDB.dbo.PSOPER)'
EXEC(@SQL)
SET @SQL = 'INSERT OPENROWSET(''MSDASQL'',''DRIVER={SQL Server};SERVER='+ @ID +';UID=sa; PWD='', POSDB.dbo.PSOPER)
SELECT * FROM PBOPER'
EXEC(@SQL)
放进去......
* 要从DB1 选'G001' ~ 'G100' 然后放进DB2....
[ 本帖最后由 panic_tee 于 21-9-2006 06:36 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 21-9-2006 08:30 PM
|
显示全部楼层
原帖由 panic_tee 于 21-9-2006 06:25 PM 发表
看过了.....还是不太明白.....怎办?
我要把'G001' loop 到 'G100', 好让我把这:
放进去......
* 要从DB1 选'G001' ~ 'G100' 然后放进DB2....
那里一段不明白? 尝试写出来... 不能 work 的话我来帮你 debug, 我 debug 不了大家也可以帮你...  |
|
|
|
|
|
|
|
发表于 22-9-2006 01:51 PM
|
显示全部楼层
用while loop
declare @count int
set @count = 0
while(@count<100)
begin
if(@count < 10)
begin
set @ID = 'G00' + cast(@count as varchar(10))
end
else if (@count >= 10 and @count < 100)
begin
SET @ID = 'G0' + cast(@count as varchar(10))
end
else
begin
SET @ID = 'G' + cast(@count as varchar(10))
end
.
.
set @count = @count + 1
end |
|
|
|
|
|
|
|

楼主 |
发表于 23-9-2006 04:17 PM
|
显示全部楼层
这样可以吗?
declare @index integer
declare @id AS cHAR(2)
declare @term_id AS CHAR(4)
declare @sql AS VARcHAR(1000)
SET @TERM_ID = 'G1'
set @index = 101
while @index < 132
begin
SET @INDEX=@ID
SELECT * FROM PHTRXH WHERE TERM_ID = @TERM_Id +@ID
--EXEC(@SQL)
set @index = @index + 1
end
* 从G101 到G131, 可是没RESULT出来.... |
|
|
|
|
|
|
|
发表于 26-9-2006 06:15 PM
|
显示全部楼层
不可以这样,
这query只能一个一个拿出result,而不是一次过,
要一次过,
SELECT * FROM PHTRXH WHERE TERM_ID in ('G000','G001'....) |
|
|
|
|
|
|
|

楼主 |
发表于 2-10-2006 08:48 PM
|
显示全部楼层
我尝试.....这样做:
DELETE FROM OPENROWSET(''MSDASQL'',''DRIVER={SQL Server};SERVER IN ('G001','G002');UID=sa WD='', POSDB.dbo.PSOPER)
可是却出现以下的ERROR....
[Microsoft][ODBC SQL Server Driver]Syntax error or access violation |
|
|
|
|
|
|
|
发表于 3-10-2006 10:56 AM
|
显示全部楼层
如果你要delete
就直接写
DELETE FROM OPENROWSET WHERE TERM_ID in ('G000','G001'....)
如果你是在store procedure哪里写,那些connection string 的东西可以免掉。
如果是在coding里写,你可以把''MSDASQL'',''DRIVER={SQL Server}.....放在connection string里,然后open他。
不知你要怎样做。
[ 本帖最后由 sawyih1 于 4-10-2006 10:49 AM 编辑 ] |
|
|
|
|
|
|
|

楼主 |
发表于 3-10-2006 02:20 PM
|
显示全部楼层
原帖由 sawyih1 于 3-10-2006 10:56 AM 发表
如果你要delete
就直接写
DELETE FROM OPENROWSET WHERE TERM_ID in ('G000','G001'....)
如果你是在store procedure哪里写,那些connection string 的东西可以免掉。
如果是在coding里写,你可以把''MSDA ...
connection string 要怎样写啊?
可以写成:
SET @SQL='DELETE FROM OPENROWSET WHERE TERM_ID in ('G000','G001'....) '...吗?
那些G001,G002....是不同的电脑哦....
[ 本帖最后由 panic_tee 于 3-10-2006 02:21 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 4-10-2006 10:29 AM
|
显示全部楼层
string ConnectionString = "DRIVER={SQL Server};SERVER=192.168.0.5;Trusted_connection=yes;DATABASE=northwind;";
OdbcConnection myConnection = new OdbcConnection(ConnectionString);
myConnection.Open();
如果你要delete table from 个别的电脑,
你就必须一行一行写connection string连接去这些电脑,
然后才能delete 那电脑里的table. |
|
|
|
|
|
|
|
发表于 4-10-2006 10:49 AM
|
显示全部楼层
原帖由 sawyih1 于 3-10-2006 10:56 AM 发表
如果你要delete
就直接写
DELETE FROM OPENROWSET WHERE TERM_ID in ('G000','G001'....)
如果你是在store procedure哪里写,那些connection string 的东西可以免掉。
如果是在coding里写,你可以把''MSDA ...
其实我误会了,
我以为OPENROWSET 是一个TABLE名。
如果你要delete table from 不同的电脑,可以如下:
Delete from OPENROWSET('G000','DRIVER={SQL Server};SERVER=seattle1;UID=sa;PWD=MyPass',database.dbo.table)
Delete from OPENROWSET('G001','DRIVER={SQL Server};SERVER=seattle1;UID=sa;PWD=MyPass',database.dbo.table)
Delete from OPENROWSET('G001','DRIVER={SQL Server};SERVER=seattle1;UID=sa;PWD=MyPass',database.dbo.table)
。
。
。
。
当然个别的电脑用的 table名,UID,PWD可能不一样,要换。 |
|
|
|
|
|
|
|

楼主 |
发表于 11-10-2006 09:24 AM
|
显示全部楼层
原帖由 sawyih1 于 4-10-2006 10:49 AM 发表
其实我误会了,
我以为OPENROWSET 是一个TABLE名。
如果你要delete table from 不同的电脑,可以如下:
Delete from OPENROWSET('G000','DRIVER={SQL Server};SERVER=seattle1;UID=sa WD=MyPass',datab ...
就是说...要一个一个电脑弄咯...
那么前面的connect....就可以不用了对吗? |
|
|
|
|
|
|
|
发表于 13-10-2006 06:17 PM
|
显示全部楼层
|
|
|
|
|
|
| |
本周最热论坛帖子
|