1

我的 sql server 有问题。我想在 sql server 中运行一个命令 691 次,(对于每个 VID)。

但 VID 列的值不是 Sequential 和 Ascending。那么我该如何运行这个命令。

我的意思是我想为每个 VID 运行这个命令,它的值的数量是 691,最小值是 11,最大值是 7668。然后我想将每个 VID 的结果保存在文本文件中。

命令是:

declare @vid integer

DECLARE @FileName varchar(8000)

declare @bcpCommand varchar(8000)

set @vid = 1

while (@vid < 692)

begin

SET @FileName = 'd:\re'+ CONVERT(char(8),@vid)+'.txt'



SET @bcpCommand =  'bcp "select ak_from,ak_to,w from [socialdb].[dbo].final where ???? "  queryout "'+ @FileName + '" -C -T -c -S SONY-VAIO\SQLEXPRESS1'

EXEC master..xp_cmdshell @bcpCommand



set @vid = (@vid + 1)

end

我想用 sql server 2008 做到这一点。第一条记录是我的表记录之一。

我应该根据vid对记录进行分类,并且每个具有相同vid的记录必须在一个seprat txt文件中。

为了保存在文本文件中,我使用 bcp。我没有问题。我的问题是执行此操作的 sql server 中的查询。正如我所说,第一条记录保存在其名称为最终的表中。如何为此编写查询?

4

1 回答 1

4

为此编写查询需要您拥有某种可查询格式的数据(例如数据库中的表)。一旦你有了它,你可以很容易地编写一个查询,只选择你正在寻找的列(ak_from、ak_to、w)并通过bcp将结果放入文本文件中(请参阅:使用 bcp 实用程序将 SQL 查询导出到文本文件http://msdn.microsoft.com/en-us/library/ms162802.aspx)。

假设您将拥有超过 5 条记录和 3 个 VID,您可以在光标内写入 bcp,以便您可以循环并根据您的条件创建多个文本文件。

作为示例,下面的代码只是将 5 条记录放入一个临时表中,然后分别输出三个文本文件。

CREATE TABLE ##tbl
(
    Vid INT NOT NULL
    ,ak_from INT NOT NULL
    ,ak_to INT NOT NULL
    ,w INT NOT NULL
)

INSERT INTO ##tbl
SELECT 11, 164885, 164885, 24
UNION SELECT 11, 164885, 431072, 3
UNION SELECT 51, 731754, 690695, 2
UNION SELECT 51, 204086, 316310, 2
UNION SELECT 54, 818522, 501263, 1

DECLARE @vid VARCHAR(2)
DECLARE @querytextNoVid VARCHAR(100)
DECLARE @querytext VARCHAR(100)
DECLARE @filelocation VARCHAR(100)
DECLARE @cmd VARCHAR(255)

DECLARE vid_cursor CURSOR FOR SELECT DISTINCT vid FROM ##tbl
OPEN vid_cursor
FETCH NEXT FROM vid_cursor INTO @vid


WHILE @@FETCH_STATUS = 0
BEGIN

    SET @querytext = '"SELECT ak_from, ak_to, w FROM ##tbl WHERE vid = ' + @vid + '"'
    SET @filelocation = '"c:\out_vid' + @vid + '.dat"'
    SET @cmd = 'bcp ' + @querytext + ' queryout ' + @filelocation + ' -T -c'
    EXEC master..XP_CMDSHELL @cmd

    FETCH NEXT FROM vid_cursor INTO @vid
END
CLOSE vid_cursor
DEALLOCATE vid_cursor

DROP TABLE ##tbl

您需要确保通过 sp_configure 启用 xp_cmdshell(请参阅:启用“xp_cmdshell”SQL Server

于 2013-02-13T20:39:56.560 回答