SqlClient.SqlException (0x80131904) 开头的标识符

SqlClient.SqlException (0x80131904) The identifier that starts with

无论如何,我正在使用下面的存储过程来处理一些我正在检索以下错误的文件。可能是什么原因?:

 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

已编辑以供进一步讨论:

    @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) 
  • 您应该使用 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 错误地调用代码并将文件名作为表名传递。