有没有办法让一个variables持续一段时间?

有没有办法让一个variables持续一段时间?

Declare @bob as varchar(50); Set @bob = 'SweetDB'; GO USE @bob --- see note below GO INSERT INTO @bob.[dbo].[ProjectVersion] ([DB_Name], [Script]) VALUES (@bob,'1.2') 

看到这个问题的'USE @ bob'行。

go命令用于将代码拆分为不同的批次。 如果这正是你想要做的,那么你应该使用它,但这意味着批次实际上是分开的,你不能在它们之间共享variables。

在你的情况下,解决scheme很简单, 你可以删除go语句,在代码中不需要它们。

注意:你不能在一个use语句中使用一个variables,它必须是一个数据库的名字。

使用临时表:

 CREATE TABLE #variables ( VarName VARCHAR(20) PRIMARY KEY, Value VARCHAR(255) ) GO Insert into #variables Select 'Bob', 'SweetDB' GO Select Value From #variables Where VarName = 'Bob' GO DROP TABLE #variables go 

我更喜欢这个问题的答案全局variables与GO

这也有能力做你最初想做的事情。

需要注意的是,您需要打开SQLCMD模式(在查询 – > SQLCMD下)或默认打开所有查询窗口(工具 – >选项,然后查询结果 – >默认情况下,在SQLCMD模式下打开新的查询)

那么你可以使用以下types的代码(完全从Oscar E. Fraxedas Tormo的相同答案中撕掉 )

 --Declare the variable :setvar MYDATABASE master --Use the variable USE $(MYDATABASE); SELECT * FROM [dbo].[refresh_indexes] GO --Use again after a GO SELECT * from $(MYDATABASE).[dbo].[refresh_indexes]; GO 

你可以使用dynamicSQL,只要知道这个安全风险(在正确的syntex上不是100%肯定)

declare @bob nvarchar(50)

 declare @sql nvarchar(max) set @bob='SweetDB' set @sql = 'Use ' + @bob execute sp_executesql @sql 

不知道,如果这有帮助

 declare @s varchar(50) set @s='Northwind' declare @t nvarchar(100) set @t = 'select * from ' + @s + '.[dbo].[Customers]' execute sp_executesql @t 

临时表保留在GO语句中,所以…

 SELECT 'value1' as variable1, 'mydatabasename' as DbName INTO #TMP -- get a variable from the temp table DECLARE @dbName VARCHAR(10) = (select top 1 #TMP.DbName from #TMP) EXEC ('USE ' + @dbName) GO -- get another variable from the temp table DECLARE @value1 VARCHAR(10) = (select top 1 #TMP.variable1 from #TMP) DROP TABLE #TMP 

这不是很漂亮,但它的工作原理

如果您正在使用SQL Server,则可以为整个脚本设置全局variables,如:

 :setvar sourceDB "lalalallalal" 

并稍后在脚本中使用:

 $(sourceDB) 

确保服务器pipe理Studi中的SQLCMD模式处于打开状态,您可以通过顶层菜单单击查询并打开SQLCMD模式。

更多关于主题可以在这里find: MS文档