有没有办法让一个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文档