Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用变量指定';尺寸';当声明VARBINARY时_Sql_Variables_Sql Server 2008 R2_Varbinary_Declare - Fatal编程技术网

Sql 使用变量指定';尺寸';当声明VARBINARY时

Sql 使用变量指定';尺寸';当声明VARBINARY时,sql,variables,sql-server-2008-r2,varbinary,declare,Sql,Variables,Sql Server 2008 R2,Varbinary,Declare,在SQL Server(2008 R2)中,不要这样做: DECLARE @testVar VARBINARY(64); 我想这样做: DECLARE @varSize INT; SET @varSize = 64; DECLARE @testVar VARBINARY(@varSize); 但我得到了这个错误: “@varSize”附近的语法不正确 如何执行类似操作或强制SQL对@varSize求值?对于变量,为什么不使用MAX DECLARE @testVar VARBINARY(MAX

在SQL Server(2008 R2)中,不要这样做:

DECLARE @testVar VARBINARY(64);
我想这样做:

DECLARE @varSize INT;
SET @varSize = 64;
DECLARE @testVar VARBINARY(@varSize);
但我得到了这个错误:

“@varSize”附近的语法不正确


如何执行类似操作或强制SQL对@varSize求值?

对于变量,为什么不使用MAX

DECLARE @testVar VARBINARY(MAX);

现在已经不是70年代了。你的系统可以处理它。事实上,如果你想做的事情是可能的,我怀疑你会浪费更多的资源去做,而不是一开始就把变量声明为MAX。

为什么?只需声明最大大小(例如
8000
max
)。不会浪费任何实际存储空间。您不能强制SQL对其求值,因为处理实际上分两个阶段完成:1)编译-编译所有声明,分配变量,设置默认值,每个过程/包只执行一次。2) 运行时-每次运行过程/SQL时,都会运行处理指令
DECLARE…
是编译时语句,
SET…
是运行时语句。注意:
MAX
的性能低于
8000
@MartinSmith虽然我确信它也适用于varbinary,但该页面上的测试(尽管有人提到varbinary)都处理varchar。我不想怀疑,我只是想知道varbinary的delta大小是否相同(如果不停止我正在进行的工作和测试,我会怀疑它没有那么重要)。谢谢。这是过度优化综合症打击了我。事实上,我对现代星展广播了解不够