【问题标题】:How to assign value to Lastrow and Firstrow parameter using some variable in BULK INSERT?如何使用 BULK INSERT 中的某个变量为 Lastrow 和 Firstrow 参数赋值?
【发布时间】:2017-09-09 14:57:14
【问题描述】:
DECLARE @sqlCommand VARCHAR(MAX) DECLARE @NAME varchar (100)
DECLARE @FIRSTROW INT,@LASTROW INT
SET @FIRSTROW =
  (SELECT TOP 1 [Id]
   FROM [dbo].[TableB]
   ORDER BY [Id] DESC) + 1
SET @LASTROW = @FIRSTROW + 4
SELECT @NAME =
  (SELECT 'C:\InsertTestdata.txt')
SET NOCOUNT ON;


SET @sqlCommand = 'BULK INSERT [dbo].[TableA] FROM ''' + @NAME + '''
                            WITH (DATAFILETYPE = ''char'',
                            FIELDTERMINATOR = '','',
                            ROWTERMINATOR = '''+CHAR(10)+''',
                            FIRSTROW = 2,
                            LASTROW = '''+ @LASTROW +'''
                            );' 
EXEC (@sqlCommand);

执行上述脚本时出现错误 任何人都可以解释在批量插入语句中使用一些变量来给出 Lastrow 和 firstrow 参数的正确方法是什么?

【问题讨论】:

  • I am getting error while executing above script 是什么错误?
  • Msg 245, Level 16, State 1, Line 8 转换 varchar 值 'BULK INSERT [dbo].[TableA] FROM 'C:\InsertTestData.txt' WITH (DATAFILETYPE = ' char', FIELDTERMINATOR = ',', ROWTERMINATOR = ' ', FIRSTROW = '' 到数据类型 int。
  • 尝试将查询中的所有整数转换为 varchar ..ex:`2`

标签: sql-server sql-server-2012-express


【解决方案1】:

类似这样的:

DECLARE @sqlCommand VARCHAR(MAX) DECLARE @NAME varchar (100)
DECLARE @FIRSTROW INT,@LASTROW INT
SET @FIRSTROW = 4
  --(SELECT TOP 1 [Id]
  -- FROM [dbo].[TableB]
  -- ORDER BY [Id] DESC) + 1
SET @LASTROW = @FIRSTROW + 4
SELECT @NAME =
  (SELECT 'C:\InsertTestdata.txt')
SET NOCOUNT ON;


SET @sqlCommand = concat('BULK INSERT [dbo].[TableA] FROM ''' , @NAME , '''
                            WITH (DATAFILETYPE = ''char'',
                            FIELDTERMINATOR = '','',
                            ROWTERMINATOR = ''\n'',
                            FIRSTROW = 2,
                            LASTROW = ', @LASTROW ,'
                            );' );
print @sqlCommand;

输出

BULK INSERT [dbo].[TableA] FROM 'C:\InsertTestdata.txt'
                            WITH (DATAFILETYPE = 'char',
                            FIELDTERMINATOR = ',',
                            ROWTERMINATOR = '\n',
                            FIRSTROW = 2,
                            LASTROW = 8
                            );

【讨论】:

  • Firstrow 会有所不同
  • 您知道如何将变量分配给表中的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 1970-01-01
  • 2015-01-11
  • 2017-02-19
  • 2016-11-21
  • 2021-04-27
相关资源
最近更新 更多