佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1026|回复: 18

疑问,sql 2000 query

[复制链接]
发表于 19-9-2006 07:51 PM | 显示全部楼层 |阅读模式
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来做?*
回复

使用道具 举报


ADVERTISEMENT

发表于 20-9-2006 12:26 AM | 显示全部楼层
用 WHILE LOOP 来稿定
回复

使用道具 举报

 楼主| 发表于 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 | 显示全部楼层
去找SQL的help,或者找google
回复

使用道具 举报

Follow Us
发表于 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 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

发表于 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=saWD='', 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.
回复

使用道具 举报


ADVERTISEMENT

发表于 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=saWD=MyPass',datab ...


就是说...要一个一个电脑弄咯...

那么前面的connect....就可以不用了对吗?
回复

使用道具 举报

发表于 13-10-2006 06:17 PM | 显示全部楼层
对,前面的connection可以免了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 21-8-2025 12:19 PM , Processed in 0.148640 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表