Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 从单个查询输出到多个文件_Sql Server 2008_Multipleoutputs - Fatal编程技术网

Sql server 2008 从单个查询输出到多个文件

Sql server 2008 从单个查询输出到多个文件,sql-server-2008,multipleoutputs,Sql Server 2008,Multipleoutputs,我有点困了。。。我试图从查询中获取输出,并根据单个条件将其分解为多个文件。我在将varchar类型转换为int时出错,我无法找出原因。正在SQL Server 2008中工作 DECLARE @LOOP AS INT; DECLARE @SQL AS VARCHAR(MAX); DECLARE @BCP AS VARCHAR(MAX); DECLARE @COUNTER AS INT; DECLARE @FILENAME AS VARCHAR(MAX); SET @COUNTER='1' S

我有点困了。。。我试图从查询中获取输出,并根据单个条件将其分解为多个文件。我在将varchar类型转换为int时出错,我无法找出原因。正在SQL Server 2008中工作

DECLARE @LOOP AS INT;
DECLARE @SQL AS VARCHAR(MAX);
DECLARE @BCP AS VARCHAR(MAX);
DECLARE @COUNTER AS INT;
DECLARE @FILENAME AS VARCHAR(MAX);

SET @COUNTER='1'

SELECT @LOOP = COUNT(DISTINCT LIST_ID) FROM DATA_TABLE
WHERE STATUS='2' AND LIST_ID IS NOT NULL ;

SET @SQL=(SELECT CUSTOMER_NO FROM CUSTOMER A, DATA_TABLE B
WHERE A.CUSTOMER_ID=B.CUSTOMER_ID AND A.STATUS='2' AND LIST_ID='+@LOOP+');

SET @FILENAME='QUERYOUT C:\Projects\FILE_"'+@LOOP+'.TXT'

WHILE @COUNTER<=@LOOP
BEGIN
SELECT 
@BCP='BCP "'+@SQL+'+'+@FILENAME+''
SET @COUNTER=@COUNTER+1
END
GO
我试图使用循环值让我知道每个文件的内容。例如,LOOP='1'表示该文件包含与列表\u ID='1'关联的客户记录


关于这个错误的想法?

我不确定我是否完全理解您需要什么,但是如果您想为每个
列表ID发出BCP命令,您需要对它们进行循环并为每个执行

这可能不是你需要的,但与其等到我下班回家,我现在就发布它

DECLARE @FILENAME AS VARCHAR(MAX);
DECLARE @LISTID INT
DECLARE @LOOP AS INT;
DECLARE @BCP AS VARCHAR(MAX);
DECLARE @SQL AS VARCHAR(MAX);

DECLARE cur CURSOR FOR SELECT DISTINCT LIST_ID FROM DATA_TABLE WHERE STATUS='2' AND LIST_ID IS NOT NULL
OPEN cur

FETCH NEXT FROM cur INTO @LISTID

WHILE @@FETCH_STATUS = 0 BEGIN
    SET @FILENAME='QUERYOUT C:\Projects\FILE_'+Cast(@LISTID AS Varchar)+'.TXT -c -t -T'
    SET @SQL='(SELECT CUSTOMER_NO FROM CUSTOMER A, DATA_TABLE B WHERE A.CUSTOMER_ID=B.CUSTOMER_ID AND A.STATUS=''2'' AND LIST_ID='+@LISTID+')';
    SELECT @BCP='BCP '+@SQL+' '+@FILENAME+''
    EXEC xp_cmdshell @BCP
    FETCH NEXT FROM cur INTO @LISTID
END

CLOSE cur    
DEALLOCATE cur
1.将varchar(最大值)更改为varchar(8000)
2.为所有表添加DBNAME.SCHEMA,因为默认情况下它将指向主数据库。
在下面添加了双引号(“)
3.@FILENAME='QUERYOUT“C:\Projects\FILE_'+Cast(@LISTID AS Varchar)+'.TXT“-C-t-t'

4.“(“从客户A、数据表B中选择客户号,其中A.CUSTOMER\u ID=B.CUSTOMER\u ID和A.STATUS='2',LIST\u ID='+@LISTID+'”);

SET@FILENAME='QUERYOUT C:\Projects\FILE\u'+-CAST(@LOOP AS VARCHAR)+'.TXT”
DECLARE @FILENAME AS VARCHAR(MAX);
DECLARE @LISTID INT
DECLARE @LOOP AS INT;
DECLARE @BCP AS VARCHAR(MAX);
DECLARE @SQL AS VARCHAR(MAX);

DECLARE cur CURSOR FOR SELECT DISTINCT LIST_ID FROM DATA_TABLE WHERE STATUS='2' AND LIST_ID IS NOT NULL
OPEN cur

FETCH NEXT FROM cur INTO @LISTID

WHILE @@FETCH_STATUS = 0 BEGIN
    SET @FILENAME='QUERYOUT C:\Projects\FILE_'+Cast(@LISTID AS Varchar)+'.TXT -c -t -T'
    SET @SQL='(SELECT CUSTOMER_NO FROM CUSTOMER A, DATA_TABLE B WHERE A.CUSTOMER_ID=B.CUSTOMER_ID AND A.STATUS=''2'' AND LIST_ID='+@LISTID+')';
    SELECT @BCP='BCP '+@SQL+' '+@FILENAME+''
    EXEC xp_cmdshell @BCP
    FETCH NEXT FROM cur INTO @LISTID
END

CLOSE cur    
DEALLOCATE cur