Nit*_*xDM 73 sql sql-server sql-server-2000 sql-server-2008 sql-server-2012
有没有办法坚持变量?
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')
Run Code Online (Sandbox Code Playgroud)
请参阅"USE @bob"行的SO问题.
RBa*_*ung 110
使用临时表:
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
Run Code Online (Sandbox Code Playgroud)
Guf*_*ffa 31
该go命令用于将代码拆分为单独的批处理.如果这正是您想要做的,那么您应该使用它,但这意味着批次实际上是分开的,并且您不能在它们之间共享变量.
在您的情况下,解决方案很简单; 您可以删除go语句,在该代码中不需要它们.
附注:您不能在use语句中使用变量,它必须是数据库的名称.
Mat*_*vic 12
除了能够做你原本想做的事情之外,还有其他好处.
需要注意的是,您需要打开SQLCMD模式(在Query-> SQLCMD下)或默认情况下为所有查询窗口打开它(工具 - >选项然后查询结果 - >默认情况下,在SQLCMD模式下打开新查询)
然后你可以使用以下类型的代码(完全从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
Run Code Online (Sandbox Code Playgroud)
如果您使用 SQL Server,您可以为整个脚本设置全局变量,例如:
:setvar sourceDB "lalalallalal"
Run Code Online (Sandbox Code Playgroud)
并稍后在脚本中使用:
$(sourceDB)
Run Code Online (Sandbox Code Playgroud)
确保 SQLCMD 模式在 Server Managment Studi 中处于打开状态,您可以通过顶部菜单单击“查询”并打开 SQLCMD 模式来执行此操作。
有关该主题的更多信息可以在这里找到: MS 文档
| 归档时间: |
|
| 查看次数: |
35298 次 |
| 最近记录: |