2011-08-01 1 views
0

의견을 보내 주셔서 감사합니다.하지만 SELECT가 아니라 UPDATE 명령에 대한 도움이 필요했습니다. 누구나 UPDATE 명령 구문에 도움이 될 수 있습니까?저장 프로 시저에서 테이블을 동적으로 지정하는 방법

테이블 이름을 저장 프로 시저에 전달하고 있지만 SQL이이를 인식하지 못하는 것 같습니다.

DECLARE @userTable AS VARCHAR(200); 
SET @userTable = @currTable 


UPDATE @userTable 
SET  [lang_String] = @lang_String, [date_Changed] = @submitDate1 
WHERE (ID = @ID) 

@currTable은 저장 프로 시저에 전달됩니다. 모든 테이블 이름은 코드에 따라 설계되었습니다.

당신은, 당신은 전체 SQL 문자열을 구축하고, 예를 들어 다음과 같이 그것을 실행할 필요가 없습니다
+0

일반적으로 sql은 그렇게 작동하지 않으므로 동적 SQL 함수 (거의 모든 플랫폼에 SQL 함수가 있음)를 사용해야합니다. 데이터베이스를 알지 못하면 무엇을해야할 지 알려주지 않습니다. – EBarr

+0

이것은 일반적으로 SQL 반 패턴입니다. 코드를 작성하기 전에 tablename과 columns를 모르는 경우, 틀린 일을하고있는 것입니다. 가능한 모든 업데이트를 처리하기 위해 하나의 업데이트를 작성하지 마십시오. 이 코드를 제대로 테스트 할 수 없기 때문에 내가 관리하는 데이터베이스에 넣을 수있는 방법은 없습니다. 동적 쿼리에 액션 쿼리 (삽입/업데이트/삭제)를 넣는 것을 생각할 때마다 데이터베이스가 위험에 처하게됩니다. – HLGEM

+0

전달 된 변수가 정적 인 경우가 아닙니다. 그들은 국제 표준에 의해 설정된 다른 테이블에 고정되어 있습니다. – htm11h

답변

5

:

DECLARE @sql nvarchar(4000) 

SELECT @sql = ' SELECT col1, col2, col3 ' + 
       ' FROM dbo.' + quotename(@tblname) + 
       ' WHERE keycol = @key' 

EXEC sp_executesql @sql, N'@key varchar(10)', @key 
+0

그것이 SQL 서버라고 가정합니다! – EBarr

+0

사실, 나는 그 가정을했다. –

+0

SQL Express 2008 – htm11h

0

이 아주 쉽게 작동 할 수있어 ....

@myTable varchar(150) 

/* Comments: 
*/ 

AS 
SET NOCOUNT ON; 

DECLARE @sql varchar(max); 

SET @sql = 'SELECT [ID], [StringID], [GUID] FROM ' + @myTable + ' ORDER BY [GUID]'; 

print (@sql) 

EXECUTE(@sql); 

SET @langTable = Null; 

참고로 myTable에서 사용할 수있는 값은 다른 테이블에 저장되며 사용자가 편집 할 수 없습니다. 테이블 이름은 고유 한 값 조합을 기반으로 코드에 동적으로 작성됩니다.