使用批量复制导出到csv,转换错误

时间:2017-11-09 08:40:07

标签: sql-server bcp

尝试使用批量复制将SQL Server表导出到void n(FILE *f, int *pocet, char **spz) { int i = 0; int pocett = 0; char* r = (char*)malloc(50 * sizeof(char)); if (spz != NULL) { free(spz); } spz = (char**)malloc(sizeof(char*)); if (f == NULL) { printf_s("File is null"); return; } while (fgets(r, 50, f)) { switch (i % 6) { case 1: { if (i == 1) { spz[0] = (char*)malloc(50 * sizeof(char)); spz[0] = r; } else { spz = (char**) realloc(spz,((i - 1) / 6 + 1) * sizeof(char*)); spz[((i - 1) / 6)] = (char*)malloc(50 * sizeof(char)); strcpy_s(spz[(i-1)/6], 50 ,r); } break; } case 5: { pocett++; break; } } i++; } *pocet = ++pocett; } 文件时,会发生以下错误:

  

将varchar值转换为数据类型int时转换失败。

     

无法解析列级排序规则

复制开始,然后抛出错误。

enter image description here

enter image description here

编辑: 现在我把它作为输出......

enter image description here

int main() {
    FILE *f = NULL;
    int c;
    int pocet = 0;
    int* p  = &pocet;
    char** spz = NULL;
    while ((c = getchar()) != 'k') {
        getchar();
        switch (c) {
            case 'v': {
                v(&f);
                break;
                      }
            case 'o': {
                //printf_s("AHOJ\n");
                break;
                      }
            case 'n': {
                n(f, p, spz);
                break;
                      }
            case 's': {
                s(spz, *p);
                break;
                      }
            case 'p': {
                printf_s("AHOJ\n");
                break;
                      }
            case 'z': {
                printf_s("AHOJ\n");
                break;
                      }
            default: {
                printf_s("Skus znova\n");
                break; 
                     }
        }
    }
    return 0;
}

1 个答案:

答案 0 :(得分:-1)

评论太长了:

我想我明白你要用

做什么
SELECT @ColumnHeader = COALESCE(@ColumnHeader, ',', '') + '''' + 'name' + ''''
FROM    INFORMATION_SCHEMA.COLUMNS AS C
WHERE   C.TABLE_NAME = @Table_Name

但你真的尝试过吗?

结果@ColumnHeader看起来像: ,'name''name''name''name'

你说"隔离查询执行得很好"。我怀疑。

我认为你的意思是:

SELECT @ColumnHeader = COALESCE(@ColumnHeader + ',', '') + QUOTENAME(C.COLUMN_NAME, '''')
FROM    INFORMATION_SCHEMA.COLUMNS AS C
WHERE   C.TABLE_NAME = @Table_Name