我正在使用 SSMS 并嘗試創建一個存盤程序(因為它需要在批次中存活),所以我可以從多個 csv 檔案(一次一個)批量插入特定表。
到目前為止,我有:
CREATE PROCEDURE AddDataToTable @TableName VARCHAR(25), @DataFolderPath VARCHAR(250),
@DataFile VARCHAR(50), @FieldDeterminator VARCHAR(10)
AS
BEGIN
DECLARE @SQL_BULK VARCHAR(MAX)
SET @SQL_BULK =
'BULK INSERT ' @TableName '
FROM ''' @DataFolderPath @DataFile '''
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ''' @FieldDeterminator ''',
ROWTERMINATOR = ''0x0A'',
TABLOCK
)'
PRINT @SQL_BULK
EXEC @SQL_BULK
END
GO
并與
EXEC AddDataToTable 'dbo.People',@DataFolderPath,'\ImdbName.csv',';'
我得到了錯誤:
訊息 911,級別 16,狀態 4,程序 AddDataToTable,第 18 行(批處理開始行 161)資料庫“BULK INSERT dbo”不存在。確保輸入的名稱正確。
問題是我還在程式中添加了一個列印陳述句,列印結果看起來應該與每個參考都一樣:
BULK INSERT dbo.People
FROM 'C:\Users\PC\Desktop\Data\ImdbName.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ';',
ROWTERMINATOR = '0x0A',
TABLOCK
)
uj5u.com熱心網友回復:
您使用了錯誤的語法。像這樣執行動態生成的陳述句:
EXEC (@SQL_BULK)
或者
DECLARE @err int
EXEC @err = sp_executesql @SQL_BULK
IF @err <> 0 PRINT 'Error found.'
作為附加說明,QUOTENAME()當您從輸入字串生成 SQL Server 識別符號時,請始終使用以防止可能的 SQL 注入問題:
SET @SQL_BULK = 'BULK INSERT ' QUOTENAME(@TableName) ' FROM ... '
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/507038.html
上一篇:SQLServer資料透視日期
