sql >> データベース >  >> RDS >> Sqlserver

列の動的な値を使用して一括挿入する方法

    これは、カーソルが SQL Server で実際に理想的である数少ない例の 1 つです。ここに方法があります。 PRINT ステートメントを確認して問題がなければ、それをコメント アウトし、その下の 2 行のコメントを解除できます。通常は必要なファイル名と処理日を追加するロジックをいくつか入れましたが、テーブル定義にはこれらの列が必要です。それはアイデアを伝える必要があります。

    <プレ>--------------------------------------------------------------------------------------------------------------- --Set some variables --------------------------------------------------------------------------------------------------------------- DECLARE @dt VARCHAR(10) --date variable but stored as VARCHAR for formatting of file name DECLARE @fileLocation VARCHAR(128) = 'E:\DATA_TRANSFERS\' --production location which is \\issqlstd01 but the xp_dirtree didn't like this DECLARE @sql NVARCHAR(4000) --dynamic sql variable DECLARE @fileName VARCHAR(128) --full file name variable --------------------------------------------------------------------------------------------------------------- --Get a list of all the file names in the directory --------------------------------------------------------------------------------------------------------------- IF OBJECT_ID('tempdb..#FileNames') IS NOT NULL DROP TABLE #FileNames CREATE TABLE #FileNames ( id int IDENTITY(1,1) ,subdirectory nvarchar(512) ,depth int ,isfile bit) INSERT #FileNames (subdirectory,depth,isfile) EXEC xp_dirtree @fileLocation, 1, 1 --------------------------------------------------------------------------------------------------------------- --Create a cursor to fetch the file names --------------------------------------------------------------------------------------------------------------- DECLARE c CURSOR FOR select subdirectory from #FileNames where isfile = 1 OPEN c FETCH NEXT FROM c INTO @fileName --------------------------------------------------------------------------------------------------------------- --For each file, bulk insert --------------------------------------------------------------------------------------------------------------- WHILE @@FETCH_STATUS = 0 BEGIN SET @sql = 'BULK INSERT Employee_Table FROM '''+ @fileLocation + @fileName +''' WITH (FIELDTERMINATOR = ''\t'',KEEPNULLS,ROWTERMINATOR = ''0x0a'')' --Try the bulk insert, if error is thrown log the error --Also update the Table Columns which aren't a part of the original file (load date and original file name) BEGIN TRY PRINT(@sql) --EXEC(@sql) --UPDATE Employee_Table SET OrigFile = @fileName, LoadDate = GETDATE() WHERE OrigFile IS NULL END TRY BEGIN CATCH SELECT ERROR_MESSAGE() END CATCH FETCH NEXT FROM c INTO @fileName END CLOSE c DEALLOCATE c GO


    1. Mysqlデータベースを使用したSolr検索、データインポート用のユーティリティ

    2. Djangomakemigrationsは同じ変更を続けます

    3. 別のテーブルからデータをプルしながら、制約付きのテーブルを作成するにはどうすればよいですか?

    4. MariaDBクラスターを監視するためのヒント