2015-02-06 2 views
-1

Я использую хранимую процедуру, как показано ниже, для некоторых файлов, я возвращаю следующую ошибку. Что может быть причиной ?:SqlClient.SqlException (0x80131904) Идентификатор, начинающийся с

System.Data.SqlClient.SqlException (0x80131904): The identifier that starts with 'D:\DISKSEC\TETRAIBMSolution\TETRA\Data\IDJSKDOSD\Parsed\IOPDCVv3995ReportErgfdgfgdfIOPShun_e6c5b926-fb91-484e-bfe0-9c13a96f' is too long. Maximum length is 128. 

хранимой процедуры я использую:

ALTER PROCEDURE [dbo].[BulkInsertDelimeted] 
       @InputFileName Varchar(700), 
       @TableName Varchar(200) 
     AS 
     BEGIN 
     declare @query varchar(6000) 
      set @Query ='BULK INSERT "' + @TableName + '" FROM "'+ @InputFileName+'" 
       WITH (DATAFILETYPE = ''char'', FIELDTERMINATOR = '','' , ROWTERMINATOR = ''\n'')'; 
     print @query 
     exec (@query) 
     END 

EDITED для дальнейшего обсуждения:

@InputFileName NVarchar(256), 
    @TableName NVarchar(128) 
AS 
BEGIN 
declare @query NVarchar(max) 
    set @Query =N'BULK INSERT ' + N'.' + 
     QUOTENAME(@TableName) + N' FROM '+ QUOTENAME(@InputFileName, '''') 
     + N' WITH (DATAFILETYPE = ''char'', FIELDTERMINATOR = '','' , ROWTERMINATOR = ''\n'')'; 
print @query 
exec (@query) 
END 

из VB:

db.AddInParameter(cmd, "InputFileName", SqlDbType.NVarChar, fileToBeParsedPath) 'fileName 
      db.AddInParameter(cmd, "TableName", SqlDbType.NVarChar, ReportDatabase.TableName) 
+0

Я бы попробовал объявить их как Nvarchar (с соответствующими размерами или даже с «Nvarchar (MAX)»). Еще одна вещь, которую я бы сделал (чтобы проверить ее), - это объединить строки, которые вы устанавливаете в @Query var, как Nvarchars, размещая перед открытием фактической строки, так же: 'set @Query = n'BULK INSERT" '+ CAST (@TableName AS NVARCHAR (MAX) + n' "FROM" '+ CAST (@InputFileName AS NVARCHAR (MAX) + n' " WITH (DATAFILETYPE = '' char '', FIELDTERMINATOR = '', '' , ROWTERMINATOR = '' \ n '') '; ' –

+0

Удостоверьтесь, что тип данных столбца - varchar (max) – Gericke

+0

. Я поместил varchar (MAX) в каждый столбец в моей таблице и внутри BULK everyfield в качестве varchar (MAX) той же ошибки – unknown

ответ

1
  • вы должны использовать NVARCHAR для имен объектов (Unicode!)
  • вы должны использовать NVARCHAR для имен файлов (Unicode!)
  • вы должны позволить для не таблиц схемы по умолчанию, проходят в схеме
  • вы должны использовать NVARCHAR для текста запроса (Unicode!)
  • вы должны использовать [ и ] в качестве разделителей
  • использования QUOTENAME

    CREATE PROCEDURE [dbo].[BulkInsertDelimeted] 
         @InputFileName NVarchar(256), 
         @TableName NVarchar(128), 
         @TableShema NVARCHAR(128) 
    AS 
    BEGIN 
    declare @query Nvarchar(max) 
        set @Query =N'BULK INSERT ' + QUOTENAME(@TableSchema) + N'.' + 
         QUOTENAME(@TableName) + N' FROM '+ QUTENAME(@InputFileName, '''') 
         + N' WITH (DATAFILETYPE = ''char'', FIELDTERMINATOR = '','' , ROWTERMINATOR = ''\n'')'; 
    print @query 
    exec sp_executesql @query 
    END 
    

Что касается ошибки: очевидно, вы неправильно вызываете код из VB, и вы передаете имя файла в качестве имени табуляции.

+0

Привет, Ремус, посмотрите на мой основной пост, я добавил отредактированный запрос bul ​​и его работу прямо сейчас. скажите мне, нужна ли мне переменная TableSchema, если y es, что я должен добавить в параметр vb. Второй вопрос: 256 для InputFileName - ограничение символов. Третья очередь: какой размер столбцов в моей таблице? – unknown

Смежные вопросы