iT邦幫忙

0

MSSQL變數傳入

  • 分享至 

  • xImage

ALTER PROCEDURE sp_BIXconfigure
@dealercode char(6),
@dealername char(6),
AS
Begin
INSERT INTO STGtable
SELECT *
FROM [@dealercode].[dbo].ACTMA,[@dealercode].[dbo].ACTMB B
End
小弟最近在寫一個sp程式,但是我宣佈變數,要傳入不同資料庫,執行處理處理
但會出現以下問題,似乎不能這樣傳入,不知有什麼方式可以改寫。請指教謝謝

訊息 208,層級 16,狀態 1,程序 sp_BIXconfigure,行 11
無效的物件名稱 '@dealercode.dbo.ACTMA'。

(1 個資料列受到影響)

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

14
賽門
iT邦超人 1 級 ‧ 2012-03-14 00:16:03
最佳解答

茲說明修訂如下:

  1. @dealername char(6), <--最後面的逗號拿掉
  2. FROM [@dealercode].[dbo].....<--不能直接用@dealercode變數, T-SQL不會把LA01帶進來, 而直接執行FROM @dealercode.dbo.ACTMA, 因此產生您得到的錯誤訊息, 因為T-SQL不能用@dealercode當Schema. 正確的寫法要帶點巨集的觀念...

修訂您的程式碼如下:

&lt;pre class="c" name="code">ALTER PROCEDURE sp_BIXconfigure
@dealercode char(6),
@dealername char(6)
AS
DECLARE @EXECSTR NVARCHAR(5000)
Begin
SET @EXECSTR = 'INSERT INTO STGtable ' +
               'SELECT * ' +
               '  FROM [' + @dealercode + '].[dbo].ACTMA A, ' +
               '       [' + @dealercode + '].dbo].ACTMB B ' + 
               ' WHERE A.xxxx=B.xxxx'
EXECUTE(@EXECSTR)
End

但, 建議您增加Where條件, 以免資料量太大影響效能. Where條件內容如果您不太會處理, 可以回應, 我再增補給您.

看更多先前的回應...收起先前的回應...
Albert iT邦高手 1 級 ‧ 2012-03-14 09:04:50 檢舉

賽大 程式風格 很成熟 很棒

Albert iT邦高手 1 級 ‧ 2012-03-14 09:05:16 檢舉

比 土產軟體 成熟 100倍

rt788 iT邦新手 5 級 ‧ 2012-03-14 09:20:13 檢舉

謝謝你simon581923,我測試看看。

rt788 iT邦新手 5 級 ‧ 2012-03-14 10:06:35 檢舉

改完之後compiler變成會出現
訊息 102,層級 15,狀態 1,行 1
接近 '@YEAR' 之處的語法不正確。

(1 個資料列受到影響)
不知哪邊又有問題。能否請教一下

rt788 iT邦新手 5 級 ‧ 2012-03-14 10:17:32 檢舉
賽門 iT邦超人 1 級 ‧ 2012-03-14 12:27:38 檢舉

rt788提到:
接近 '@YEAR' 之處的語法不正確。

變數@YEAR並不在這支Procedure中, 是否其他Procedure呢?

還是您最終版本的Procedure中有這個變數??

rt788 iT邦新手 5 級 ‧ 2012-03-15 16:56:13 檢舉

simon581923,非常感謝你啦,
我已經找到問題,改寫好了,
真的是非常謝謝。

4
Albert
iT邦高手 1 級 ‧ 2012-03-13 22:47:17

拜託幫幫忙
請參考:: EXEC
CREATE PROCEDURE usp_demo
@ids sysname
WITH EXECUTE AS 'dbo'
AS
EXEC(N'SELECT name FROM sysobjects WHERE id IN ('+ @ids + N')')
RETURN
GO

rt788 iT邦新手 5 級 ‧ 2012-03-13 23:39:45 檢舉

小弟看不太懂,能否請大大說明一下,
因為我在另一個sp有寫
@dealercode ='LA01'
@dealername='技術部門'
然後呼叫sp_BIXconfigure,做查詢動作,但是他就會不認得@dealercode,這個資料庫名稱,因為我有很多資料庫,要傳入,不知在跨資料庫,能否用變數傳入。

我要發表回答

立即登入回答