Я знаю, что у нас много ответов на эту проблему, но я до сих пор не понимаю, в чем причина этой ошибки.Должен объявить скалярную переменную «@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"
Вы не можете получить доступ к '@ serverName' (или любой другой переменной) изнутри' EXEC (@sql) ', потому что они объявлены вне его. Динамический SQL не работает. – Blorgbeard
См.: Http://stackoverflow.com/questions/28481189/exec-sp-executesql-with-multiple-parameters – Blorgbeard
Если я не могу получить доступ к @serverName изнутри EXEC (@sql), то какое наилучшее решение для что? – Jhe