Sql server 如何将vbs参数传递给sql存储过程?

Sql server 如何将vbs参数传递给sql存储过程?,sql-server,vbscript,Sql Server,Vbscript,我是StackOverflow的新手,我带着一个我似乎找不到答案的问题来到这里 我正在尝试执行一个存储过程,该过程提取数据,并使用BCP将它们分离到不同的文件中 这是我的存储过程: CREATE PROCEDURE [dbo].[GetAllDeaths] @Datname varchar(2) AS SET NOCOUNT ON DECLARE @getid CURSOR DECLARE @getMax CURSOR DECLARE @LevelID int DECLARE @SubLeve

我是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:对不起,我的英语不好,如果我讲不懂的话,我已经在这里面呆了一个星期了。

为了能够传递参数,您的过程必须接受一个参数。但是,您在代码中省略了存储过程的开头,因此无法判断是否是这样。它应该是
“EXEC getalldeations'”+Datname+“
而不是
“EXEC getalldeations”+Datname+”
?ie您需要围绕该值提供引号,因此当
Datname=“DE”
命令解析为
“EXEC getalldeath'DE”
?非常感谢您的帮助!