我在SSMS中使用SQLCMD模式的T-SQL从一个文件运行各种子文件,主要文件(princ.sql)是我需要声明的地方,并设置一个变量@MyInteger并运行一个子文件:
DECLARE @MyInteger INT
SET @MyInteger = 20
:setvar path "your absolute file path here"
:r $(path)\"query.sql"
:r $(path)\"uses Myingteger too.sql"
这很好用;作为一个最小的例子,考虑query.sql和'使用MyInteger too.sql'拥有相同的一行
SELECT @MyInteger
我确实得到了两个20的实例。
我的麻烦在于我希望能够使用本地定义的变量@SubMyInteger自行运行query.sql。 我对query.sql的理想情况是
IF @MyInteger is declared
SET @SubMyInteger = @MyInteger
ELSE
SET @SubMyInteger = 90
SELECT @SubMyInteger
然后当我运行query.sql时,不会声明@MyInteger,因此@SubMyInteger将被分配90,并且将返回90。如果我运行princ.sql
,我也会像以前一样回来两个20秒对于IF声明,我到目前为止尝试了两件事:
IF OBJECT_ID('@MyInteger') IS NOT NULL
和
IF @MyInteger IS NOT NULL
我收到错误
Must declare scalar variable "@MyInteger".
如果我尝试声明@MyInteger然后运行princ.sql,我会收到错误
The variable '@MyInteger' has already been declared.
即使声明语句是以IF为条件的。
有没有办法在这里实现我想要的?
由于