Хорошо, у меня есть проект базы данных Visual Studio, в котором я пытаюсь выполнить некоторые действия после развертывания (Script.PostDeployment.sql).
Что я пытаюсь сделать?
Мне нравится копировать содержимое файла сценария и вставлять его в процедуру .
Обзор
ИтакУ меня есть файл с некоторым SQLCMD
MyScriptFileWithSomeInserts.sql -- The content I like to log is in this file
exec InsertDataProcedure [ScriptContent] -- How can I get it here?
Здесь у нас есть псевдокод того, что я пытаюсь сделать
-- read file and insert to variable
:setvar ScriptContent :r MyScriptFileWithSomeInserts.sql
-- input the content to the procedure
exec InsertDataProcedure [@ScriptContent]
Что я пробовал?
1
Следующая ошибка не выполняется, потому что это не процедура, а всего лишь сценарий в моем проекте базы данных.
declare @ScriptContent nvarchar(Max)
SELECT @ScriptContent = OBJECT_DEFINITION(OBJECT_ID(N'MyScriptFileWithSomeInserts.sql'))
exec InsertDataProcedure @ScriptContent
2
Я пытался использовать : r ( SQLCMD ) для чтения файла
declare @xx nvarchar(Max) =
:r MyScriptFileWithSomeInserts.sql
exec InsertDataProcedure [@ScriptContent]
3
Я пытался использовать всеразличные варианты SQLCMD , например, : i для чтения файла
declare @xx nvarchar(Max) =
:i MyScriptFileWithSomeInserts.sql
exec InsertDataProcedure [@ScriptContent]
Моя настройка
Visual Studio 2019 и целевая платформа MS AzureБаза данных SQL V12.
Обновление:Как это было решено
Это то, чем я закончил после помощи Джона.
DECLARE @solutionDir VARCHAR(200),@File VARCHAR(200)
-- In the SQLCMD I have access to $(SolutionPath) so I need to do some
-- cleaningto get the absolute path to the file
SELECT @solutionDir = REPLACE('$(SolutionPath)','MySolution.sln','');
SET @File = @solutionDir + 'Databases\MyDb\MyScriptFileWithSomeInserts.sql'
DECLARE @retvalue nvarchar(max)
DECLARE @SQL nvarchar(max);
DECLARE @ParmDef nvarchar(50);
-- Read the content of the file
SELECT @SQL = N'SELECT @retvalOUT = BulkColumn FROM OPENROWSET(BULK ''' + @File + ''', SINGLE_BLOB) AS x' ;
SET @ParmDef = N'@retvalOUT nvarchar(max) OUTPUT';
EXEC sp_executesql @SQL, @ParmDef, @retvalOUT=@retvalue OUTPUT;
-- And here I have all the content of the file.
PRINT '@retvalue: ' + @retvalue