我有一个在两台服务器上复制的数据库,一个实时服务器和一个测试服务器,这样只要需要,'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绝对适用于测试服务器。 有没有办法在创建存储过程时忽略错误消息?
我发现了一个先前的问题,解释了如何使用相同的名称创建 存储过程,但我需要存储过程来包含服务器认为不正确的脚本。
答案 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
注意: