Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >声明标量变量

声明标量变量
EN

Stack Overflow用户
提问于 2017-01-11 09:15:02
回答 3查看 3K关注 0票数 0

我正在编写一个错误失败的动态SQL语句。

必须声明标量变量"@@config“

我试图分解代码,并可以确认以下代码确实返回结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Declare @@sql as nvarchar(max);
Declare @SourceDatabase as nvarchar(10);
Declare @DestDatabase as nvarchar(10);
Declare @@Harray as nvarchar(max) ;

Set @SourceDatabase = 'D_EXP_CPM';
Set @DestDatabase = 'T_EXP_CPM';

set @@sql = 'SELECT B.Hierarchy_SKey AS ''NEW'', A.Hierarchy_SKey AS ''OLD''
             INTO ##TEMPHCONVERT
             FROM ' + @SourceDatabase + '.[dbo].[DIM_HIERARCHY] A 
             INNER JOIN ' + @DestDatabase + '.[dbo].[DIM_HIERARCHY] B 
                   ON A.Hierarchy_Desc = B.Hierarchy_Desc
             WHERE A.Hierarchy_SKey in (' + @@Harray + ');'

exec (@@sql);

Declare @@config as NVARCHAR(MAX);

SELECT @@config = COALESCE(@@config + ', H' + cast(A.[NEW] as nvarchar), 'H' + cast(A.[NEW] as nvarchar)) 
FROM ##TEMPHCONVERT A;


Print @@config

返回值:"H15,H16,H17,H18“

当插入动态SQL语句时,尽管我得到了错误.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Declare @SourceDatabase as nvarchar(10)
Declare @DestDatabase as nvarchar(10)
Declare @@sql as nvarchar(max) --variable to hold sql statements for this stored proc
Declare @@Harray as nvarchar(max) -- variable to hold hierarchy array elements from source

Set @SourceDatabase = 'D_EXP_CPM';
Set @DestDatabase = 'T_EXP_CPM';

Declare @@config as NVARCHAR(MAX);

set @@sql = 
'SELECT 
B.Hierarchy_SKey AS ''NEW'', A.Hierarchy_SKey AS ''OLD''
INTO ##TEMPHCONVERT
FROM ' + @SourceDatabase + '.[dbo].[DIM_HIERARCHY] A 
INNER JOIN ' + @DestDatabase + '.[dbo].[DIM_HIERARCHY] B 
ON A.Hierarchy_Desc = B.Hierarchy_Desc

WHERE A.Hierarchy_SKey in (' + @@Harray + ');'

exec (@@sql);

set @@sql = '
UPDATE A SET A.[Value_Text] = (SELECT @@config = COALESCE(@@config + '', H'' + cast(A.[NEW] as nvarchar), ''H'' + cast(A.[NEW] as nvarchar)) 
FROM ##TEMPHCONVERT A)
FROM ' + @DestDatabase + '.[dbo].[DIM_CONFIG] A ON A.[Config_Desc] = ''JBCODE FTE Map Hierarchy  List'' ;' 

exec (@@sql);

注意,为了使文章尽可能简短,我已经从中间删除了相当多的代码。有人能解释我为什么会出错吗?

我尝试在动态SQL语句中两处声明变量,但都不允许代码运行。我在想,也许这个变量需要以某种方式传递,但我不知道如何将它传递到子查询中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-11 09:28:59

将@@config声明放在@@sql字符串中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Declare @SourceDatabase as nvarchar(10)
    Declare @DestDatabase as nvarchar(10)
    Declare @@sql as nvarchar(max) --variable to hold sql statements for this stored proc
    Declare @@Harray as nvarchar(max) -- variable to hold hierarchy array elements from source
    Set @SourceDatabase = 'D_EXP_CPM';
    Set @DestDatabase = 'T_EXP_CPM';
set @@sql = 
'SELECT 
B.Hierarchy_SKey AS ''NEW'', A.Hierarchy_SKey AS ''OLD''
INTO ##TEMPHCONVERT
FROM ' + @SourceDatabase + '.[dbo].[DIM_HIERARCHY] A 
INNER JOIN ' + @DestDatabase + '.[dbo].[DIM_HIERARCHY] B 
ON A.Hierarchy_Desc = B.Hierarchy_Desc

WHERE A.Hierarchy_SKey in (' + @@Harray + ');'

exec (@@sql);

set @@sql = 'Declare @@config as NVARCHAR(MAX) 
UPDATE A SET A.[Value_Text] = (SELECT COALESCE(@@config + '', H'' + cast(A.[NEW] as nvarchar), ''H'' + cast(A.[NEW] as nvarchar)) 
FROM ##TEMPHCONVERT A)
FROM ' + @DestDatabase + '.[dbo].[DIM_CONFIG] A ON A.[Config_Desc] = ''JBCODE FTE Map Hierarchy  List'' ;' 
exec (@@sql);
票数 0
EN

Stack Overflow用户

发布于 2017-01-11 11:08:49

我不知道你为什么会有这个错误,但这是对你所拥有的的一次轻微的重写。我喜欢声明一个模板,然后在执行之前替换参数,而不是连接一个长字符串。它只会让我更容易读懂。我将所有相关代码移到@@sql中,并在临时表中返回结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Declare @@sql as nvarchar(max);
Declare @SourceDatabase as nvarchar(10);
Declare @DestDatabase as nvarchar(10);
Declare @@Harray as nvarchar(max) ;

Set @SourceDatabase = 'D_EXP_CPM';
Set @DestDatabase = 'T_EXP_CPM';
set @@Harray = '1,2,3';

set @@sql = '
SELECT B.Hierarchy_SKey AS ''NEW'', A.Hierarchy_SKey AS ''OLD''
INTO #TEMPHCONVERT
FROM [[source]].[dbo].[DIM_HIERARCHY] A 
INNER JOIN [[dest]].[dbo].[DIM_HIERARCHY] B 
ON A.Hierarchy_Desc = B.Hierarchy_Desc
WHERE A.Hierarchy_SKey in ([Harray]);

Declare @@config as NVARCHAR(MAX);
SELECT @@config = COALESCE(@@config + '', H'' + cast(A.[NEW] as nvarchar), ''H'' + cast(A.[NEW] as nvarchar)) 
FROM #TEMPHCONVERT A;

select [config] = @@config into ##config
'

set @@sql = replace(@@sql, '[source]', @SourceDatabase)
set @@sql = replace(@@sql, '[dest]', @DestDatabase)
set @@sql = replace(@@sql, '[Harray]', @@Harray)

exec (@@sql);

select * from ##config

drop table ##config
票数 0
EN

Stack Overflow用户

发布于 2017-01-12 01:03:46

声明@config为NVARCHAR(MAX);

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT @config = COALESCE(@config + ', H' + cast(A.[NEW] as nvarchar), 'H' + cast(A.[NEW] as nvarchar)) 
FROM #TEMPHCONVERT A;

set @sql = 'UPDATE A SET A.[Value_Text] = (@config )
FROM ' + @DestDatabase + '.[dbo].[DIM_CONFIG] A WHERE A.[Config_Desc] = ''JBCODE FTE Map Hierarchy  List'' ;'


PRINT 'STEP 15 COMPLETE';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41596831

复制
相关文章
PHP7标量类型声明RFC
一、总结 该RFC建议添加4种新的标量类型声明:int,float,string和bool,这些类型声明将会和PHP原来的机制保持一致的用法。RFC 更推荐给每一个PHP文件,添加一句新的可选指令(declare(strict_type=1);),让同一个PHP文件内的全部函数调用和语句返回, 都有一个“严格约束”的标量类型声明检查。此外,在开启严格类型约束后,调用拓展或者PHP内置函数在参数解析失败,将产生一个 E_RECOVERABLE_ERROR级错误。通过这两个特性,RFC希望编写PHP能够变得更准
wangxl
2018/03/07
1.1K0
PHP7标量类型声明RFC
Go - 变量声明
在声明变量之前,咱们先了解下变量的数据类型,这篇文章主要涉及 字符串、布尔、数字,其他类型后面开篇再说。
新亮
2019/07/08
1.2K0
Go - 变量声明
TypeScript 变量声明
变量声明 var var number1 = 1; 一旦声明变量之后,变量就会在函数中持续存在 块作用域 function count() { for (var i=0; i<5; i++
Emperor_LawD
2021/05/16
1.6K0
TypeScript 变量声明
PHP声明变量
变量是指在程序的运行过程中随时可以发生变化的量,在代码中可以只使用一个变量,也可以使用多个变量,变量中可以存放单词、数值、日期以及属性等。变量的值是临时的,当程序运行的时候,该值是存在的,如果程序结束,变量的值就会丢失。虽然在前面的示例中也使用到了变量,但是没有详细的说明,本节将详细介绍如何创建变量,以及如何引用变量。 2.4.1  创建变量 PHP中的变量是用美元符号($)作为前缀的标示符,标识符是一个标识不同对象的符号,如变量的名称,函数的名称,或者其他用户自定义对象的名称。在PHP中,标识符的命
joshua317
2018/04/16
4.1K0
Python-声明变量
在 Python 中,定义变量非常简单,只需要为变量赋一个值即可自动创建该变量,并推断出变量的数据类型
用户9006224
2023/04/22
9260
golang的变量声明
作者:matrix 被围观: 3 次 发布时间:2023-01-31 分类:Golang | 无评论 »
HHTjim 部落格
2023/02/13
1.1K0
PHP | 变量、标量知识梳理与运用详析
也就是小数,可以用小数点或者科学计数法表示。 科学计数法可以使用小写的e,也可以使用大写的E。 demo:
凌川江雪
2019/02/26
1K0
Mysql 声明变量并赋值
注意上面两种赋值符号,使用set时可以用“=”或“:=”,但是使用select时必须用“:=赋值”
一个会写诗的程序员
2018/08/17
4K0
Java-如何声明变量
其中,数据类型可以是Java中的任意一种数据类型,如int,float,double等等,变量名则是你自己指定的一个唯一的名称
用户9006224
2023/04/22
9280
freemarker声明变量「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115822.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/08
2.2K0
Go入门系列:变量声明
首先明确一点就是Go语言是静态语言,意味着对于变量的使用来说,必须先进行声明之后才可以使用。
每周聚焦
2022/08/17
8240
ES6 let变量声明以及声明特性
在 ES6(ECMAScript 2015)中,引入了 let 关键字来声明变量。相比于之前的 var 关键字,let 具有一些独特的声明特性,提供了更好的作用域控制和变量绑定的行为。
堕落飞鸟
2023/05/22
6270
JS变量声明提升解释
来说一下函数表达式,var C 与 function C 都是声明语句,区别在于 var C 是函数表达式,而 function C 是函数声明。
OECOM
2020/07/02
4.7K0
LinearLayout.onMeasure-声明变量
mTotalLength:表示所有子View所需要的高度 maxWidth:表示这个LinearLayout的宽度,最后设置宽度的时候用到的 childState: alertnativeMaxWidth:没有Weight属性的子View中,最大的宽度 weightedMaxWidth :有weight属性的子View中,最大的宽度 allFillParent :是否所有的子View都是fillParent的 totalWeight:所有子View的weight和,到时候会用来计算剩余空间的分配 count:子View的总数 widthMode:宽度的MeasureSpec的Mode heightMode:高度的MeasureSpec的Mode matchWidth: baselineChildIndex: useLargestChild:是否用最高的子View大小 largestChildHeight:子View中最高的大小
None_Ling
2018/10/24
9180
TypeScript 中的变量声明:变量声明的语法、变量的作用域、变量的类型推断和类型断言
TypeScript 是一种由微软开发的静态类型编程语言,它是 JavaScript 的超集,并且可以在编译时进行类型检查。在 TypeScript 中,变量声明是非常重要的一个概念,它定义了变量的名称和类型。通过正确地声明变量,我们可以增强代码的可读性、可维护性和可扩展性。本文将详细介绍 TypeScript 中的变量声明,包括变量声明的语法、变量的作用域、变量的类型推断和类型断言等内容。
网络技术联盟站
2023/07/06
8020
4. 变量声明和变量状态设计
本篇并不是针对 Kotlin 的语言特性介绍,但它比语言特性更为重要。上一篇文章讲的是空安全特性,它允许你方便的处理对象可能为空的情况。但他价值更大的另一面在于,Kotlin 可以声明不可能为空的对象。
sickworm
2020/02/11
1.7K0
go语言的变量声明
注意初始化器的个数必须与变量个数相同。 有初始化器时,变量类型可以省略,该变量的类型会根据初始化器自动推断。 例子:
梦飞
2022/06/23
1.1K0
python关于变量的声明
s = "我是全局变量"def glo_and_non(): def do_local (): s = "我是局部变量" print ("1 "+ s) #在do_local中声明了一个局部变量s def do_nonlocal(): nonlocal s #在glo_and_non中声明的一个变量 s = "我不是局部,也不是全局" def do_global (): global s #声明的一个全局变量
常温阔乐
2022/11/18
2.6K1
JavaScript-变量/函数声明提升
(1)如上定义了一个名为test的变量,但未给这个变量进行初始化(也就是没有赋值),此时其默认初始化值为 undefined。
WEBING
2019/03/13
1.1K0
JavaScript-变量/函数声明提升
MySQL变量声明、赋值和使用
上面两种赋值符号,使用set时可以用“=”或“:=”,但是使用select时必须用“:=赋值”
Java那些事儿
2020/07/21
3.4K0

相似问题

必须声明标量变量"@Hlava“必须声明标量变量"@Vaha”

16

必须声明标量变量/变量已经声明

21

如何声明标量变量?

10

必须声明标量变量。

14

必须声明标量变量@

33
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文