DECLARE @VCBYF VARCHAR(6)if len(ltrim(str(MONTH( GETDATE()))))=1 
SET  @VCBYF=(ltrim(str(YEAR( GETDATE())))+'0'+ltrim(str(MONTH( GETDATE()))))
else
SET  @VCBYF=(ltrim(str(YEAR( GETDATE())))+ltrim(str(MONTH( GETDATE()))))EXEC master..xp_cmdshell 'bcp "SELECT A.YHZH, B.YHMC, C.ZJE, B.DAH ,B.YHMC FROM  jd_Gas.dbo.T_BCXXB D INNER JOIN  jd_Gas.dbo.T_YHDAB B ON D.DBBH=B.DBBH INNER JOIN  jd_Gas.dbo.T_YHDKYHZL A ON A.DAH=B.DAH INNER JOIN jd_Gas.dbo.T_CBJLB C ON B.DAH = C.DAH AND A.DAH = C.DAH where 1=1 AND  c.cbyf=@VCBYF and  B.DBBH=''"AG1111"''  AND B.SFFS = ''"银行代扣"''" queryout c:\DT.txt -c -t"|" -U"sa" -P"sa"'
它怎么老提示我
SQLState = 37000, NativeError = 137Error = [Microsoft][ODBC SQL Server Driver][SQL Server]必须声明变量 '@VCBYF'。SQLState = 37000, NativeError = 8180
Error = [Microsoft][ODBC SQL Server Driver][SQL Server]未能准备语句。

解决方案 »

  1.   

    DECLARE @VCBYF VARCHAR(6) 
    DECLARE @Sql NVARCHAR(1000)
    if len(ltrim(str(MONTH( GETDATE()))))=1 
    SET  @VCBYF=(ltrim(str(YEAR( GETDATE())))+'0'+ltrim(str(MONTH( GETDATE())))) 
    else 
    SET  @VCBYF=(ltrim(str(YEAR( GETDATE())))+ltrim(str(MONTH( GETDATE())))) SET @Sql='bcp "SELECT A.YHZH, B.YHMC, C.ZJE, B.DAH ,B.YHMC FROM  jd_Gas.dbo.T_BCXXB D INNER JOIN  jd_Gas.dbo.T_YHDAB B ON D.DBBH=B.DBBH INNER JOIN  jd_Gas.dbo.T_YHDKYHZL A ON A.DAH=B.DAH INNER JOIN jd_Gas.dbo.T_CBJLB C ON B.DAH = C.DAH AND A.DAH = C.DAH where 1=1 AND  c.cbyf='''+@VCBYF+''' and  B.DBBH=''AG1111''  AND B.SFFS = ''银行代扣''" queryout c:\DT.txt -c -t"|" -U"sa" -P"sa"' 
    EXEC master..xp_cmdshell @Sql
      

  2.   

    你要把 @VCBYF 的值 拼串進bcp中去啊AND  c.cbyf='''+@VCBYF+''' 
      

  3.   

    你把变量名放到了SQL语句里面,但是在那个SQL语句里你并没有定义那个变量,所以就会报错。解决方法看一楼的
      

  4.   

    SET @Sql='bcp "SELECT A.YHZH, B.YHMC, C.ZJE, B.DAH ,B.YHMC FROM  jd_Gas.dbo.T_BCXXB D INNER JOIN  jd_Gas.dbo.T_YHDAB B ON D.DBBH=B.DBBH INNER JOIN  jd_Gas.dbo.T_YHDKYHZL A ON A.DAH=B.DAH INNER JOIN jd_Gas.dbo.T_CBJLB C ON B.DAH = C.DAH AND A.DAH = C.DAH where 1=1 AND  c.cbyf='''+@VCBYF+''' and  B.DBBH='''+@VDBBH+'''  AND B.SFFS = ''银行代扣''" queryout c:\'''+@VFILENAME+'''.txt -c -t"|" -U"sa" -P"sa"'
    EXEC master..xp_cmdshell @Sql

    SET @Sql1= 'bcp "SELECT A.YHZH, B.YHMC, C.ZJE, B.DAH ,B.YHMC FROM  jd_Gas.dbo.T_BCXXB D INNER JOIN  jd_Gas.dbo.T_YHDAB B ON D.DBBH=B.DBBH INNER JOIN  jd_Gas.dbo.T_YHDKYHZL A ON A.DAH=B.DAH INNER JOIN jd_Gas.dbo.T_CBJLB C ON B.DAH = C.DAH AND A.DAH = C.DAH where 1=1 AND  c.cbyf='''+@VCBYF+''' and  B.DBBH='''+@VDBBH+'''  AND B.SFFS = ''"银行代扣"''" queryout c:\'''+@VFILENAME+'''.txt -c -t"|" -U"sa" -P"sa"'
    EXEC master..xp_cmdshell @Sql1两条一起执行的话,能不能把它们的数据叠加起来啊???我这样写是把上一条的数据给覆盖了
      

  5.   


    DECLARE @A intEXEC master..xp_cmdshell 'SELECT * FROM 表1 WHERE ID=@A'
    这样是不行的。必须:EXEC master..xp_cmdshell 'DECLARE @A int;SELECT * FROM 表1 WHERE ID=@A'
    就可以了。叠加两个表用UNION ALL。不过不太清楚你bcp是啥玩易,所以不能给出你5楼的答案。