2013-03-14 2 views
0

XML 입력을 가져 와서 임시 테이블에 저장하는 다음 쿼리가 있습니다. 나는 쿼리가 동적 또는 모든 테이블 또는 열 번호 수정 dynamically.How에 적응하는 함수해야 할 나는 그렇게 :쿼리를 동적 SQL로 변경

DECLARE @sXML NVARCHAR(4000) 
DECLARE @hDoc INT 
SET @sXML = ' 
<Root> 
<Item> 
    <Key>1</Key> 
    <Test1>A</Test1> 
    <Test2>A2</Test2> 
</Item> 
<Item> 
    <Key>2</Key> 
    <Test1>B</Test1> 
    <Test2>B3</Test2> 
</Item> 
</Root> 
' 
CREATE TABLE #tabletest 
( 
[Key] INT, 
Test1 NVARCHAR(50), 
Test2 NVARCHAR(50) 
) 
EXEC sp_xml_preparedocument @hDoc OUTPUT, @sXML 
INSERT INTO #tabletest SELECT * FROM OPENXML (@hDoc, '/Root/Item', 2) WITH #tabletest 
EXEC sp_xml_removedocument @hDoc 

select * from #tabletest 
DROP TABLE #tabletest 
+0

귀하의 질문에 답변되었거나 더 도움이 필요합니까? –

답변

1

동적 SQL을 만들려면 문자열로 쿼리를 구축 할 필요가 . 문 및 다른 논리를 사용하여 변수 추가 ... 등.

텍스트 변수를 선언하고이를 사용하여 원하는 SQL을 연결하십시오.

그런 다음 "EXEC"을 사용하여이 코드를 실행할 수있는 명령

예 : 그러나

DECLARE @SQL VARCHAR(100) 
DECLARE @TableOne VARCHAR(20) = 'TableOne' 
DECLARE @TableTwo VARCHAR(20) = 'TableTwo' 
DECLARE @SomeInt INT 

SET @SQL = 'INSERT INTO ' 

IF (@SomeInt = 1) 
    SET @SQL = @SQL + @TableOne 

IF (@SomeInt = 2) 
    SET @SQL = @SQL + @TableTwo 

SET @SQL = @SQL + ' VALUES....etc' 

EXEC (@SQL) 

, 당신은 정말이 방법을 사용할 때 조심해야 뭔가라는 보안 문제가 "SQL 인젝션 ".

당신이 여기에 읽을 수 있습니다 : SQL 주입을 방지하기 위해 http://msdn.microsoft.com/en-gb/library/ms161953(v=sql.105).aspx

한 가지 방법은 SQL-Server에 변수를 전달하기 전에 당신의 C# 코드에 대해 유효성을 확인하는 것입니다.

"EXEC"명령 대신 "sp_executesql"이라는 내장 저장 프로 시저를 사용하는 것이 좋습니다 (또는 아마도 가장 좋은 추측에 사용됨). 의

자세한 사항은 여기에서 찾을 수 있습니다 : 여기에 자세히 설명되어 사용되는 방법 http://msdn.microsoft.com/en-gb/library/ms188001.aspx : http://msdn.microsoft.com/en-gb/library/ms175170(v=sql.105).aspx

당신은 약간 다르게 SQL을 구축하고뿐만 아니라 저장 프로 시저에 매개 변수를 전달해야합니다

@ SQL.

관련 문제