尽管存在错误但要创建存储过程(转移到不同的服务器)

时间:2017-02-22 11:59:48

标签: sql-server stored-procedures

我有一个在两台服务器上复制的数据库,一个实时服务器和一个测试服务器,这样只要需要,'test'数据库就会被'live'数据库覆盖(这样我就可以重置所有内容)我弄得一团糟。) 我想在'test'数据库中存储一个只能在'test'数据库中运行的存储过程,但为了做到这一点,我还需要将它存放在'live'数据库中,这样它就可以在'test'数据库中复制了。测试'被覆盖。  程序开始:

if @@SERVERNAME<>'TEST'
begin
    raiserror ('NOT ON TEST! This SP must only be run on TEST.',16,1)
    return 
end 

因此,如果它在现场运行,它会立即退出。

不幸的是,“实时”数据库服务器使用较旧版本的SQL,并且似乎不理解脚本中的超前/滞后/超出语句,并且由于这些“语法错误”错误而拒绝创建过程。

SP绝对适用于测试服务器。 有没有办法在创建存储过程时忽略错误消息?

我发现了一个先前的问题,解释了如何使用相同的名称创建 存储过程,但我需要存储过程来包含服务器认为不正确的脚本。

1 个答案:

答案 0 :(得分:3)

在创建时不能验证存储过程的唯一方法是在其中运行动态SQL查询。

示例:

CREATE PROCEDURE dbo.YourStoredProcedure AS 
BEGIN 

IF @@SERVERNAME<>'TEST'
BEGIN
    RAISERROR ('NOT ON TEST! This SP must only be run on TEST.',16,1)
    RETURN
END

DECLARE @SQL NVARCHAR = N'
SELECT rowOne
, rowTwo
, valueOne
, LEAD(valueOne) OVER (PARTITION BY rowOne ORDER BY rowTwo DESC) AS preValue
FROM dbo.YourTable
'

EXEC(@SQL)

END

注意:

  • 从长远来看,尝试为不同的系统找到比数据库复制更好的策略。检查持续部署
  • 确保检查连接的dynamic-sql是否存在潜在问题(sql注入)。查看QUOTENAME()