特定のフォルダに保存したSQLスクリプトを実行できるようにストアドプロシージャを作成します。私はいくつかの記事を紹介しましたが、どれも私に明確な答えを与えていません。誰も私に何か提案を与えてもらえますか?フォルダ内のすべてのSQLスクリプトを呼び出すストアドプロシージャ
0
A
答えて
1
明らかに、SQLアカウントはこれらのファイル/フォルダへのアクセス権を必要とします。
DECLARE @FileContents VARCHAR(MAX)
SELECT @FileContents=BulkColumn
FROM OPENROWSET(BULK'PathToYourFile.sql', SINGLE_BLOB) x;
EXECUTE(@FileContents)
それはより多くの '動的' にするには:
DECLARE @path nvarchar(MAX)
DECLARE @FileContents varchar(MAX)
SET @path = N'C:\Users\username\Desktop\example.txt'
SET @path = REPLACE(@path, N'''', N'''''')
DECLARE @sql nvarchar(MAX)
SET @sql = N'SELECT @FileContents=BulkColumn FROM OPENROWSET(BULK''' + @path + ''', SINGLE_BLOB) x;'
EXEC sp_executesql @sql, N'@FileContents varchar(MAX) OUTPUT', @[email protected] OUTPUT;
EXECUTE(@FileContents);
更新 あなたはこのようなディレクトリ内のファイルを一覧表示することができます。
DECLARE @BasePath varchar(8000)
SET @BasePath = 'D:\temp'; -- List contents of this directory
--Create a temp table to hold the results.
IF OBJECT_ID('tempdb..#DirectoryTree')IS NOT NULL
DROP TABLE #DirectoryTree;
CREATE TABLE #DirectoryTree
(
id int IDENTITY(1,1)
,fullpath varchar(2000)
,subdirectory nvarchar(512)
,depth int
,isfile bit
);
INSERT #DirectoryTree (subdirectory, depth, isfile)
EXEC master.sys.xp_dirtree @BasePath, 1, 1;
-- SELECT subdirectory, * FROM #DirectoryTree
-- Start Cursor
DECLARE @fileName varchar(MAX) -- filename for backup
DECLARE fileList CURSOR FOR (SELECT subdirectory FROM #DirectoryTree WHERE isfile = 1)
OPEN fileList
FETCH NEXT FROM fileList INTO @fileName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @BasePath + '\' + @fileName
PRINT @fileName
PRINT 'You can do something with the file here...'
-- SET @fileContents = 'blabla' get the file contents
--EXECUTE('fileContents')
FETCH NEXT FROM fileList INTO @fileName
END
CLOSE fileList
DEALLOCATE fileList
-- End Cursor
IF OBJECT_ID('tempdb..#DirectoryTree')IS NOT NULL
DROP TABLE #DirectoryTree;
1
あなたが取得するsqlcmd
を使用することができますファイル名を指定し、インスタンスに対してスクリプトを実行します。
DECLARE @path VARCHAR(128) = 'C:\SQLScripts\ '
,@cmd VARCHAR(1024)
CREATE TABLE dirList (
line varchar(1000)
)
SET @cmd = 'dir /b ' + @path + '*.sql'
INSERT INTO dirList (line)
EXEC xp_cmdshell @cmd
DECLARE @actualFile VARCHAR(256)
DECLARE cur CURSOR FAST_FORWARD READ_ONLY FOR
SELECT * FROM dirList WHERE line IS NOT NULL;
OPEN cur
FETCH NEXT FROM cur INTO @actualFile
WHILE @@FETCH_STATUS = 0
BEGIN
SET @cmd = 'sqlcmd -S <ComputerName>\<InstanceName> -i ' + @path + @actualFile
EXEC xp_cmdshell @cmd
FETCH NEXT FROM cur INTO @actualFile
END
CLOSE cur
DEALLOCATE cur
DROP TABLE dirList
注:あなたはこのような何か行うことができます
+0
xp_dirtreeはxp_cmdshellよりも良いオプションです。しかし、はい、それは動作します。 –
+0
ありがとうございます。しかし、私は** sqlcmdを使用せずにこれをしようとしています** ... – Curiousity
関連する問題
- 1. Oracle:パッケージ内のストアドプロシージャを呼び出す
- 2. SQL ServerのIN句内でストアドプロシージャを呼び出しますか?
- 3. VBでSQL Serverストアドプロシージャを呼び出す
- 4. SQLからストアドプロシージャを呼び出す
- 5. 別のストアドプロシージャを呼び出すSQL Serverストアドプロシージャの問題
- 6. ストアドプロシージャ内でGRANTを呼び出す
- 7. 他のストアドプロシージャを呼び出すストアドプロシージャ内の例外フロー
- 8. MySQLのストアドプロシージャでストアドプロシージャを呼び出す
- 9. MySQLのストアドプロシージャ内でストアドプロシージャを呼び出す方法
- 10. CLRストアドプロシージャからT-SQLストアドプロシージャを呼び出す
- 11. SQLスクリプトから.exeを呼び出す
- 12. ストアドプロシージャpythonを呼び出す
- 13. ストアドプロシージャを呼び出す
- 14. ストアドプロシージャ(MVC4)を呼び出す
- 15. SQL Server:テーブルデータを使用してストアドプロシージャを呼び出す
- 16. R、RJDBCを使用してSQL Serverストアドプロシージャを呼び出す
- 17. SQLデータソースを使用してストアドプロシージャを呼び出しますか?
- 18. トラブルこのMS-SQLストアドプロシージャを呼び出すときにGroovyの
- 19. SQL CLRの権利:CLRのストアドプロシージャを呼び出す
- 20. SQLストアドプロシージャをSQL Server 2000から呼び出す方法は?
- 21. ストアドプロシージャの結果をストアドプロシージャSql Server 2008を呼び出すのに使用
- 22. すべての変更状態でjsスクリプトを呼び出す
- 23. 私は(スクリプト内の)同じフォルダからファイルを呼び出すには
- 24. Rの季節パッケージを呼び出すSQL ServerストアドプロシージャR
- 25. 別のSQL Serverデータベースエンジンからストアドプロシージャを呼び出す
- 26. ストアドプロシージャの更新を呼び出すBizTalk WCF-SQLコンポジット操作、シーケンス?
- 27. Pythonのsqlalchemyストアドプロシージャを呼び出す
- 28. ストアドプロシージャを別のコレクションに呼び出す
- 29. wcfのループでストアドプロシージャを呼び出す
- 30. ストアドプロシージャの列名を呼び出す
を私は 'はできないバルクロードというエラーを取得します。ファイル "C:\ Users \ ssss \ Desktop \ abc.txt"は存在しません。** PathToYourFile.sql **は、スクリプトまたは特定のファイルへのパスを保存したフォルダを意味しますか? ** example.txt **は、スクリプトへのパスを含むテキストファイルを意味しますか?申し訳ありませんが、私は少し混乱しています。 – Curiousity
example.txtはSQLコードを含むファイルになります。もちろん、パスのリストを含むファイルを作成することもできます。このエラーが発生した場合は、パスが間違っているか、サーバーがローカルコンピュータで実行されていないか、sql-userがこのファイルにアクセスできません。 –
ありがとう..それは働いた..私はこれを使用して一度に複数のSQLスクリプトを実行したい場合は、別のファイルまたはそのような何かからパスを読み取る必要がありますか?あるいは、一度に複数のスクリプトを実行する他の方法はありますか?同様に、フォルダのパスを指定して、その場所にあるすべてのスクリプトを実行しますか? – Curiousity