是否可以在数据库项目中获取脚本文件的内容?

问题描述 投票:1回答:2

好,所以我有一个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?

这里我们正在尝试做一些pseudocode

-- read file and insert to variable
:setvar ScriptContent :r MyScriptFileWithSomeInserts.sql 

-- input the content to the procedure
exec InsertDataProcedure [@ScriptContent] 

我尝试了什么?

1

以下操作失败,因为这是not一个过程,而仅仅是我的数据库项目中的一个脚本。

declare @ScriptContent nvarchar(Max)
SELECT @ScriptContent = OBJECT_DEFINITION(OBJECT_ID(N'MyScriptFileWithSomeInserts.sql'))
exec InsertDataProcedure @ScriptContent 

2

我尝试使用:rSQLCMD)读取文件

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

sql sql-server sqlcmd database-project
2个回答
1
投票

只是一个想法,但您的列表中没有看到OPENROWSET

Declare @S varchar(max); 
Select @S = BulkColumn FROM  OPENROWSET(BULK 'C:\SomeDir\SomeScript.sql', SINGLE_BLOB) x; 


Print @S
--Exec(@S)

0
投票

转到数据库,然后右键单击所需脚本的表,然后单击“脚本表为”,它显示另一个部分,显示“创建为”,然后单击它,并打开到另一个部分,然后选择“新查询编辑器窗口”单击该按钮,您的查询就会显示出来,将其复制并粘贴到需要的地方。右键单击表---->脚本表为----->创建至---->新的查询编辑器窗口其实我没有正确地得到你的解释。我刚刚向您展示了如何获取脚本以从一个地方复制到另一个地方

© www.soinside.com 2019 - 2024. All rights reserved.