Sql server 如何将vbs参数传递给sql存储过程?
我是StackOverflow的新手,我带着一个我似乎找不到答案的问题来到这里 我正在尝试执行一个存储过程,该过程提取数据,并使用BCP将它们分离到不同的文件中 这是我的存储过程: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
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”
?非常感谢您的帮助!