[SQL] 변수로 테이블 이름
SQL변수로 테이블 이름
나는이 쿼리를 실행하려고 :
declare @tablename varchar(50)
set @tablename = 'test'
select * from @tablename
이것은 다음과 같은 오류가 발생합니다 :
테이블 이름이 동적으로 채운 올바른 방법은 무엇입니까?
해결법
-
==============================
1.쿼리가 정적 인 경우 테이블 이름과 열 이름은 정적 일 필요가있다. 동적 테이블 또는 열 이름의 경우, 동적 전체 SQL을 생성해야하며, 사용 sp_executesql을 그것을 실행.
쿼리가 정적 인 경우 테이블 이름과 열 이름은 정적 일 필요가있다. 동적 테이블 또는 열 이름의 경우, 동적 전체 SQL을 생성해야하며, 사용 sp_executesql을 그것을 실행.
자세한 내용은 여기 세부 정보 : 저주와 동적 SQL의 축복
-
==============================
2.여기에 마지막 문을 변경 :
여기에 마지막 문을 변경 :
EXEC('SELECT * FROM ' + @tablename)
이것은 내가 저장 프로 시저에서 내 작업을 수행하는 방법이다. 첫 번째 블록은 변수를 선언하고,이 경우 TEST_2012OCTOBER에, 현재 연도와 월 이름을 기준으로 테이블 이름을 설정합니다. 그때는 이미 DB에 존재하는지 확인하고 않는 경우 제거합니다. 그런 다음 블록은 테이블을 만들려면 SELECT INTO 문을 사용하여 매개 변수를 사용하여 다른 테이블에서 레코드를 채 웁니다.
--DECLARE TABLE NAME VARIABLE DYNAMICALLY DECLARE @table_name varchar(max) SET @table_name = (SELECT 'TEST_' + DATENAME(YEAR,GETDATE()) + UPPER(DATENAME(MONTH,GETDATE())) ) --DROP THE TABLE IF IT ALREADY EXISTS IF EXISTS(SELECT name FROM sysobjects WHERE name = @table_name AND xtype = 'U') BEGIN EXEC('drop table ' + @table_name) END --CREATES TABLE FROM DYNAMIC VARIABLE AND INSERTS ROWS FROM ANOTHER TABLE EXEC('SELECT * INTO ' + @table_name + ' FROM dbo.MASTER WHERE STATUS_CD = ''A''')
-
==============================
3.당신은 변수의 테이블 이름을 사용할 수 없습니다, 대신이 작업을 수행해야 할 것이다 :
당신은 변수의 테이블 이름을 사용할 수 없습니다, 대신이 작업을 수행해야 할 것이다 :
DECLARE @sqlCommand varchar(1000) SET @sqlCommand = 'SELECT * from yourtable' EXEC (@sqlCommand)
-
==============================
4.비트 늦게 답변을하지만 다른 사람에서 도움이 될 것입니다 :
비트 늦게 답변을하지만 다른 사람에서 도움이 될 것입니다 :
CREATE PROCEDURE [dbo].[GetByName] @TableName NVARCHAR(100) AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; DECLARE @sSQL nvarchar(500); SELECT @sSQL = N'SELECT * FROM' + QUOTENAME(@TableName); EXEC sp_executesql @sSQL END
-
==============================
5.동적 SQL을 생성해야합니다 :
동적 SQL을 생성해야합니다 :
declare @tablename varchar(50) set @tablename = 'test' declare @sql varchar(500) set @sql = 'select * from ' + @tablename exec (@sql)
-
==============================
6.사용이 sp_executesql에 어떤 SQL을 실행하려면, 예를 들어,
사용이 sp_executesql에 어떤 SQL을 실행하려면, 예를 들어,
DECLARE @tbl sysname, @sql nvarchar(4000), @params nvarchar(4000), @count int DECLARE tblcur CURSOR STATIC LOCAL FOR SELECT object_name(id) FROM syscolumns WHERE name = 'LastUpdated' ORDER BY 1 OPEN tblcur WHILE 1 = 1 BEGIN FETCH tblcur INTO @tbl IF @@fetch_status <> 0 BREAK SELECT @sql = N' SELECT @cnt = COUNT(*) FROM dbo.' + quotename(@tbl) + N' WHERE LastUpdated BETWEEN @fromdate AND ' + N' coalesce(@todate, ''99991231'')' SELECT @params = N'@fromdate datetime, ' + N'@todate datetime = NULL, ' + N'@cnt int OUTPUT' EXEC sp_executesql @sql, @params, '20060101', @cnt = @count OUTPUT PRINT @tbl + ': ' + convert(varchar(10), @count) + ' modified rows.' END DEALLOCATE tblcur
-
==============================
7.또한, 당신은이를 사용할 수 있습니다 ...
또한, 당신은이를 사용할 수 있습니다 ...
DECLARE @SeqID varchar(150); DECLARE @TableName varchar(150); SET @TableName = (Select TableName from Table); SET @SeqID = 'SELECT NEXT VALUE FOR '+ @TableName + '_Data' exec (@SeqID)
-
==============================
8.
Declare @fs_e int, @C_Tables CURSOR, @Table varchar(50) SET @C_Tables = CURSOR FOR select name from sysobjects where OBJECTPROPERTY(id, N'IsUserTable') = 1 AND name like 'TR_%' OPEN @C_Tables FETCH @C_Tables INTO @Table SELECT @fs_e = sdec.fetch_Status FROM sys.dm_exec_cursors(0) as sdec where sdec.name = '@C_Tables' WHILE ( @fs_e <> -1) BEGIN exec('Select * from '+ @Table) FETCH @C_Tables INTO @Table SELECT @fs_e = sdec.fetch_Status FROM sys.dm_exec_cursors(0) as sdec where sdec.name = '@C_Tables' END
from https://stackoverflow.com/questions/2838490/table-name-as-variable by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의에서 동일한 열 값이 행을 반환하는 방법 (0) | 2020.03.07 |
---|---|
[SQL] 최대 절전 모드를 사용하는 경우 어떻게 매개 변수 값을 쿼리 문자열을 인쇄 (0) | 2020.03.07 |
[SQL] 사람이 읽을 수있는 설명에서 SQL 쿼리를 구성하는 엄지 손가락의 규칙이 있나요? (0) | 2020.03.07 |
[SQL] 관리 및 MS Access에서 SQL 쿼리를 디버깅 (0) | 2020.03.07 |
[SQL] BY 쿼리 최적화 그룹은 사용자 당 최신 행을 검색하기 (0) | 2020.03.07 |