sql - paso - ejercicios resueltos de tabla de frecuencias para datos agrupados
¿Hay alguna forma de persistir en una variable a lo largo de un intento? (7)
El comando go
se usa para dividir código en lotes separados. Si eso es exactamente lo que quiere hacer, entonces debe usarlo, pero significa que los lotes están realmente separados, y no puede compartir variables entre ellos.
En tu caso, la solución es simple; simplemente puede eliminar las declaraciones go
, no son necesarias en ese código.
Nota al margen: no puede usar una variable en una declaración de use
, tiene que ser el nombre de una base de datos.
¿Hay alguna forma de persistir en una variable a lo largo de un intento?
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'')
Vea esta pregunta SO para la línea ''USE @bob''.
Las tablas de temperatura se conservan en las declaraciones GO, por lo que ...
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
No es bonito, pero funciona
No estoy seguro si esto ayuda
declare @s varchar(50)
set @s=''Northwind''
declare @t nvarchar(100)
set @t = ''select * from '' + @s + ''.[dbo].[Customers]''
execute sp_executesql @t
Prefiero la respuesta a esta pregunta Variables globales con GO
Lo cual tiene el beneficio adicional de poder hacer lo que originalmente querías hacer también.
La advertencia es que debe activar el modo SQLCMD (en Query-> SQLCMD) o activarlo de manera predeterminada para todas las ventanas de consulta (Herramientas-> Opciones luego Buscar resultados-> Por defecto, abrir nuevas consultas en modo SQLCMD)
Entonces puede usar el siguiente tipo de código (completamente arrancado de la misma respuesta por 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
Si está utilizando SQL Server puede configurar variables globales para scripts completos como:
:setvar sourceDB "lalalallalal"
y usar luego en el script como:
$(sourceDB)
Asegúrese de que el modo SQLCMD esté activado en Server Managment Studi, puede hacerlo a través del menú superior Haga clic en Consultar y active el Modo SQLCMD.
Se puede encontrar más sobre el tema aquí: MS Documentation
Use una tabla temporal:
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
puede usar sql dinámico, solo tenga en cuenta los riesgos de seguridad con esto (no 100% seguro en el sintexto correcto)
declarar @bob nvarchar (50)
declare @sql nvarchar(max)
set @bob=''SweetDB''
set @sql = ''Use '' + @bob
execute sp_executesql @sql