更新从文件读取的 SP 定义和 运行 动态 SQL,处理 EOL

Update SP Definition reading from file and run dynamic SQL, deal with EOL

您好,我需要为 SP 创建新定义,其源位于外部物理文件中(从其他 TFS 站点导入,有 1000 多个)。我以为我在第一个 .
就解决了这个问题 但是现在我看到另一个问题,如果您将我的文件读入单行,我收到一个错误 'CREATE/ALTER PROCEDURE' must be the first statement in a query batch. 我需要将行尾带入我的 @sql
我现在看到的唯一解决方案是将所有行读入 table 多行,然后将它们连接起来?这是相当复杂的。有没有办法以更紧凑的方式处理 \n' ?下面的代码产生错误。 GO 应该单独在单独的行上。我的全局任务读取 100 多个文件和里面的 运行 代码。 而且我无权访问它们来自的源数据库,只需要处理平面文件。没有任何选项可以右键单击数据库等。

我认为这可能是完全错误的方法,我可以将这些文件放入 TFS/SQL 项目并在 TFS 之外做一些事情,可能应该是应用新代码的某种方式...(?)

CREATE TABLE #imp (Col varchar(max))
BULK INSERT  #imp
FROM '//TFSNetwork/log/Install/sp_Test02.sql'
  WITH (ROWTERMINATOR = '\nzzzzz')      ---<< ?????
select top 1 @Sql = Col from #imp
 EXEC (@sql);

---  This is content of my sample file sp_Test02
USE MAGDA_Test
GO
SET ANSI_NULLS ON
GO
/*
Description:
*/
CREATE PROCEDURE [dbo].[sp_Test]   
AS  
BEGIN  

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
    SET NOCOUNT ON;
    SELECT GETDATE() AS TS
END

Actual result: Msg 111, Level 15, State 1, Line 1
'CREATE/ALTER PROCEDURE' must be the first statement in a query batch.

Expected Result:  SP Created OK


--I suspect that SSMS/ doing some own stuff on line breaks, b'z this in this test we still have single line
DECLARE @sql NVARCHAR(MAX)   = 'This is line 1.' + CHAR(13)+CHAR(10) + 'This is line 2.'
SELECT @sql  --- 1 line
Print  @sql  --- 2 lineS

使用sqlcmd您可以为.bat文件中的所有文件编写多个条目,单击运行。这样它就可以很好地处理所有 CR/LF。只需为您的数据库获得足够的权限。 下面是简单的 .bat file.Can use universal CREATE OR ALTER PROCEDURE inside your .sql

的内容
 @echo off
sqlcmd -S dbServ10 -U UserAcct -P UserPsw -i "//TFSNetwork/log/Install/sp_Test01.sql"
 sqlcmd -S dbServ10 -U UserAcct -P UserPsw -i "//TFSNetwork/log/Install/sp_Test02.sql"
...
...
 sqlcmd -S dbServ10 -U UserAcct -P UserPsw -i "//TFSNetwork/log/Install/sp_Test100.sql"