我知道我們對這個問題有很多答案,但是我仍然不明白這個錯誤的真正原因。必須聲明標量變量「@serverName」
我已經創建了這樣的存儲過程。
CREATE PROCEDURE [dbo].[storedProc_dataPull]
@serverName nvarchar(30),
@dbName nvarchar (30),
@tblName nvarchar(30)
AS BEGIN
DECLARE @sql nvarchar(500)
DECLARE @ds nvarchar(500)
SET @ds = 'Data Source=phmnldb16\eaudit;user id=YYYY;password=XXXX'
SET @sql = 'SELECT @serverName, @dbName, sdb1.* from
OPENDATASOURCE(''SQLOLEDB'', '+Char(39)+ @ds +Char(39)+ ').AUDIT_FSA_170_001.AUD170.Workflow sdb1)'
INSERT INTO sampleDatabase.dbo.WorkFlowCopy
([ServerName]
,[DBName]
,[ID]
,[ActivityDefinitionID]
,[ParentID]
,[Caption]
,[Description]
,[ShortDescription]
,[Name]
,[Order]
,[ReferenceNumber]
,[ShowOnNavigation]
,[Status]
,[InUseBy])
EXEC (@sql)
,當我試圖執行它..
EXEC storedProc_dataPull 'serverName', 'dbName', 'tblName'
我總是得到這個錯誤:
Msg 137, Level 15, State 2, Line 1
Must declare the scalar variable "serverName"
您不能從'EXEC(@sql)'內部訪問'@ serverName'(或任何其他變量),因爲它們是在它之外聲明的。動態SQL不能像那樣工作。 – Blorgbeard
請參閱:http://stackoverflow.com/questions/28481189/exec-sp-executesql-with-multiple-parameters – Blorgbeard
如果我不能從EXEC(@sql)訪問@serverName,那麼什麼是最好的解決方案那? – Jhe