FieldList (ID int, Title varchar (50)) 테이블이 있고 열 이름이 FieldList.Title이고 형식이 varchar 인 FieldList의 각 레코드에 대한 열 목록이있는 임시 테이블을 만들고 싶습니다.
이 모든 작업은 Stored Proc에서 발생하며보고 및 데이터 분석을 위해 임시 테이블이 클라이언트에 반환됩니다.
예 :
FieldList 테이블 :
ID 제목
1 개 도시
2 UserSuppliedFieldName
3 썸 필드
결과 임시 테이블 열 :
City UserSuppliedFieldName SomeField
다음 절차를 사용하여 원하는 작업을 수행 할 수 있습니다. 다음이 필요합니다.
[ 원하는대로 proc 이름을 변경해야하지만 다음 예제에서는 temp proc 이름이 사용됩니다. ]
CREATE PROCEDURE #Abracadabra
(
@TempTableName SYSNAME,
@DummyFieldName SYSNAME,
@TestMode BIT = 0
)
AS
SET NOCOUNT ON
DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = COALESCE(@SQL + N', [',
N'ALTER TABLE ' + @TempTableName + N' ADD [')
+ [Title]
+ N'] VARCHAR(100)'
FROM #FieldList
ORDER BY [ID]
SET @SQL = @SQL
+ N' ; ALTER TABLE '
+ @TempTableName
+ N' DROP COLUMN ['
+ @DummyFieldName
+ N'] ; '
IF (@TestMode = 0)
BEGIN
EXEC(@SQL)
END
ELSE
BEGIN
PRINT @SQL
END
GO
다음 예제는 사용중인 proc을 보여줍니다. 첫 번째 실행은 실행될 SQL을 간단히 인쇄하는 테스트 모드입니다. 두 번째 실행은 SQL과 SELECT를 실행하며 EXEC는 FieldList 테이블에있는 필드임을 보여줍니다.
/*
-- HIGHLIGHT FROM "SET" THROUGH FINAL "INSERT" AND RUN ONCE
-- to setup the example
SET NOCOUNT ON;
--DROP TABLE #FieldList
CREATE TABLE #FieldList (ID INT, Title VARCHAR(50))
INSERT INTO #FieldList (ID, Title) VALUES (1, 'City')
INSERT INTO #FieldList (ID, Title) VALUES (2, 'UserSuppliedFieldName')
INSERT INTO #FieldList (ID, Title) VALUES (3, 'SomeField')
*/
IF (OBJECT_ID('tempdb.dbo.#Tmp') IS NOT NULL)
BEGIN
DROP TABLE #Tmp
END
CREATE TABLE #Tmp (Dummy INT)
EXEC #Abracadabra
@TempTableName = N'#Tmp',
@DummyFieldName = N'Dummy',
@TestMode = 1
-- look in "Messages" tab
EXEC #Abracadabra
@TempTableName = N'#Tmp',
@DummyFieldName = N'Dummy',
@TestMode = 0
SELECT * FROM #Tmp
출력 @TestMode = 1
:
ALTER TABLE #Tmp ADD [도시] VARCHAR (100), [UserSuppliedFieldName] VARCHAR (100), [SomeField] VARCHAR (100); ALTER TABLE #Tmp DROP COLUMN [더미];
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다