0

私は StackOverflow が初めてで、答えが見つからないように見える質問があります。

BCP を使用して、データを抽出して別のファイルに分割するストアド プロシージャを実行しようとしています。

これは私のストアドプロシージャです:

CREATE PROCEDURE [dbo].[GetAllDeaths] 
@Datname varchar(2)
AS
SET NOCOUNT ON
DECLARE @getid CURSOR
DECLARE @getMax CURSOR
DECLARE @LevelID int
DECLARE @SubLevelID int 
DECLARE @getNumber int
DECLARE @SQL varchar(1000)
DECLARE @Cmd varchar(1000)
DECLARE @OutputFile varchar(1000)
DECLARE @ServerName varchar(100)
DECLARE @LevelName varchar(1)

set @getid= CURSOR FOR
SELECT LevelID, SubLevelID from [crashtrack3].[dbo].LevelTableAux

open @getid
FETCH NEXT
FROM @getid into @LevelID, @SubLevelID
WHILE (@@FETCH_STATUS =0)
BEGIN

        SET @getMax = CURSOR FOR
        Select sum(Number)
        from [crashtrack3].[dbo].[tmpDeath]
        where LevelID = @LevelID and OptionalSubLevelID = @SubLevelID 

        IF @LevelID =1
            BEGIN
                SET @LevelName='J'
            END
        ELSE IF @LevelID =2
            BEGIN
                SET @LevelName='A'
            END
        ELSE IF @LevelID =3
            BEGIN
                SET @LevelName='E'
            END
        ELSE IF @LevelID=4
            BEGIN
                SET @LevelName='I'
            END
        OPEN @getMax
        FETCH NEXT
        FROM @getMax into @getNumber
        BEGIN               
        SET @ServerName = '*********\SQLEXPRESS'
        SET @SQL = '"Select LowResMapX, LowResMapY, ceiling(2000*(Number/'+CONVERT(varchar,@getNumber)+'.0)) as Cantidad from [crashtrack3].[dbo].[tmpDeath] where LevelID = '+CONVERT(char(1),@LevelID)+' and OptionalSubLevelID = '+CONVERT(char(1),@SubLevelID)+' order by LowResMapX asc"'  
        SET @OutputFile = 'C:\MyData\'+@LevelName+'0'+CONVERT(char(1),@SubLevelID)+'_("name_of_the_file_HERE").dat'
        print @OutputFile
        print 'Level ' + cast(@LevelID as char)
        print 'Sub Level ' + cast(@SubLevelID as char)
        SET @Cmd = 'bcp '+@SQL+' queryout '+ @OutputFile + ' -c -S '+@ServerName+' -T'
        print @Cmd
        EXEC master..xp_cmdshell @Cmd

            FETCH NEXT
            FROM @getMax into @getNumber

        END

        CLOSE @getMax
        DEALLOCATE @getMax  

FETCH NEXT
FROM @getid INTO @LevelID, @SubLevelID
END

DELETE [crashtrack3].[dbo].[tmpDeath]

CLOSE @getid
DEALLOCATE @getid

これは私のVBScriptファイルです:

DIM Datname
DIM EnemyWeaponID
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "SQLOLEDB"
objConnection.Open "Server=******\SQLEXPRESS;Database=crashtrack3;Integrated Security=SSPI"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection

EnemyWeaponID=1

objCommand.CommandText = "INSERT INTO [crashtrack3].[dbo].[tmpDeath] ([LevelID], [OptionalSubLevelID], [LowResMapX], [LowResMapY], [Number]) select LevelID, OptionalSubLevelID, LowResMapX, LowResMapY, count(LowResMapY) from [crashtrack3].[dbo].[PlayerDiedorFailed] where EnemyWeaponID=+"EnemyWeaponID"+ Group by LevelID, OptionalSubLevelID, LowResMapX,LowResMapY order by LowResMapX asc"
WScript.Echo objCommand.CommandText
Set objRecordSet = objCommand.Execute

IF EnemyWeaponID = 1 THEN
    Datname="DE"
ELSE IF EnemyWeaponID = 2 THEN
    Datname="RS"
ELSE IF EnemyWeaponID = 3 THEN
    Datname="RW"
END IF
END IF
END IF

objCommand.CommandText = "EXEC GetAllDeaths '"+Datname+"'"
Set objRecordSet = objCommand.Execute

objRecordset.close
objConnection.Close
set objConnection = Nothing

WScript.Echo "Success!"

私が本当に必要としているのは、vbs ファイルの "Datname" をストアド プロシージャの実行に含める方法を知ることです。

PD: 私の英語で申し訳ありません。意味が分からない場合は、ここで 1 週間立ち往生しています。

4

0 に答える 0