gpt4 book ai didi

sql - 必须声明标量变量 "@serverName"

转载 作者:行者123 更新时间:2023-12-01 12:24:51 30 4
gpt4 key购买 nike

我知道我们对这个问题有很多答案,但我仍然不明白这个错误的真正原因是什么。

我创建了一个这样的存储过程。

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"

最佳答案

使用 SP_EXECUTESQL将值传递给动态 sql 中的参数

SET @sql = 'SELECT @serverName, @dbName, sdb1.* from
OPENDATASOURCE(''SQLOLEDB'', '
+ Char(39) + @ds + Char(39)
+ ').AUDIT_FSA_170_001.AUD170.Workflow sdb1' -- unwanted close parenthesis

INSERT INTO sampleDatabase.dbo.WorkFlowCopy
([ServerName],
[DBName],
[ID],
[ActivityDefinitionID],
[ParentID],
[Caption],
[Description],
[ShortDescription],
[Name],
[Order],
[ReferenceNumber],
[ShowOnNavigation],
[Status],
[InUseBy]) -- Missing close parenthesis
EXEC Sp_executesql
@sql,
N'@serverName nvarchar(30), @dbName nvarchar (30)',
@serverName=@serverName,
@dbName=@dbName

注释:

  • Select你用过的列表,*确保选择列表返回与 Insert 相同的列数列列表和顺序相同
  • Insert 末尾缺少右括号 OPENDATASOURCE 末尾的列列表和不需要的右括号查询
  • @tblName程序内部不使用输入参数。

关于sql - 必须声明标量变量 "@serverName",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41007762/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com