1

そのため、SQL Server Management Studio を使用してプロジェクト フォルダー内から他のスクリプトを実行するスクリプトを開発する方法を探していましたが、これまでのところ、他のソリューションはどれもうまくいきませんでした。sqlcommandline を含むスクリプトを作成してみました。

sqlcmd -S.\SQLExpress -imyScript.sql; 

それはうまくいきませんでした。私の理解では、使用してもうまくいかない@\path\to\script.sqlので、他のアイデアはありますか? それとも、プロシージャの作成を検討する必要がありますか? その場合、誰かが私を正しい方向に向けることができますか?

よろしくお願いいたします。

4

1 に答える 1

0

個人的には、ストアド プロシージャの記述を検討したいと思います。MSDNのドキュメントはよくできており、簡単に検索するとオンラインで多くのリソースが見つかります。

または、次のようなことを実行してそれを実現することもできます (コマンド シェルなどを実行する権限が必要です)。

CREATE TABLE ##SQLFiles ( SQLFileName VARCHAR(2000))
GO

INSERT INTO ##SQLFiles
EXECUTE master.dbo.xp_cmdshell 'dir /b "C:\SQL Scripts\*.sql"'
GO

DECLARE cFiles CURSOR LOCAL FOR
    SELECT DISTINCT [SQLFileName]
    FROM ##SQLFiles
    WHERE [SQLFileName] IS NOT NULL AND
          [SQLFileName] != 'NULL'
    ORDER BY [SQLFileName]

DECLARE @vFileName            VARCHAR(200)
DECLARE @vSQLStmt             VARCHAR(4000)

OPEN cFiles
FETCH NEXT FROM cFiles INTO @vFileName
WHILE @@FETCH_STATUS = 0
BEGIN
    -- The following SET command must be on a single line or else an error will be generated.
    -- It is split in this script for readability purposes.
    SET @vSQLStmt = 'master.dbo.xp_cmdshell ''osql -S Server Name -U User Name -P Password
                     -d Database Name -i "C:\SQL Scripts\' + @vFileName + '"'''
    EXECUTE (@vSQLStmt)

    FETCH NEXT FROM cFiles INTO @vFileName
END

CLOSE cFiles
DEALLOCATE cFiles
GO

DROP TABLE ##SQLFiles
GO
于 2013-04-05T14:19:54.753 に答える