2011-08-01 23 views
0

感謝您的反饋意見,但我希望能獲得關於UPDATE命令的幫助,而不是SELECT。 任何人都可以幫助更新命令的語法?如何在存儲過程中動態指定表格

我正在傳遞一個表名到一個存儲過程中,但SQL似乎沒有認出它。

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


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

@currTable被傳遞到存儲過程。所有表名都是通過代碼設計構建的。

+0

一般情況下,sql不能這樣工作,你需要使用動態sql函數(幾乎所有的平臺都有它們)。儘管不知道你的數據庫,但很難告訴你該怎麼做。 – EBarr

+0

這通常是一個SQL反模式。如果你在編寫代碼之前不知道表名和列,那麼你做錯了什麼。不要嘗試寫一個更新來處理所有可能的更新。我不會允許將這種不好的代碼放入我管理的任何數據庫中,因爲它無法正確測試。每當您考慮在動態查詢中添加動作查詢(插入/更新/刪除)時,就會使數據庫處於危險之中。 – HLGEM

+0

傳入的變量是靜態的時候不是。它們被鎖定在國際標準設置的其他表格中。假設它是sql服務器,假設它是 – htm11h

回答

5

你不能,你需要建立整個SQL字符串,然後執行它,像這樣的例子:

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

! – 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的值存儲在另一個表中,用戶無法編輯。表名是基於值的唯一組合在代碼中動態構建的。