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!)
- 您应该使用
[
和 ]
作为分隔符
-
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 错误地调用代码并将文件名作为表名传递。
无论如何,我正在使用下面的存储过程来处理一些我正在检索以下错误的文件。可能是什么原因?:
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!)
- 您应该使用
[
和]
作为分隔符 -
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 错误地调用代码并将文件名作为表名传递。