我正在使用 SQL Server 2008 R2。
我的问题是使用 @ 和 @@ 声明变量有什么区别?
在 SQL Server 2008 R2 中:
示例:
语法 1:
Declare @a int = 1
select @a;
Run Code Online (Sandbox Code Playgroud)
语法 2:
Declare @@a int = 1
select @@a;
Run Code Online (Sandbox Code Playgroud)
两者都在这里做同样的工作。那为什么要使用双@@呢?
我有以下四个参数的存储过程.
存储过程spTest:
CREATE PROCEDURE spTest
@Name varchar(20) = '',
@Address varchar(100) = '',
@City varchar(50) = '',
@Pin varchar(50) = ''
AS
DECLARE @DynamicWhere varchar(max)
DECLARE @Query varchar(max)
/* Here I want to prepare a dynamic where clause for all possibilities */
SET @Query = 'SELECT * FROM Test_Table '+ @DynamicWhere +'';
EXECUTE(@Query);
GO
Run Code Online (Sandbox Code Playgroud)
好吧,我正在准备这样:
IF @Name = '' AND @Address = '' AND @City = '' AND @Pin = ''
BEGIN
SET @DynamicWhere = '';
END
ELSE …Run Code Online (Sandbox Code Playgroud) 我有以下SELECT语句来计算RADIANS和COS。
SELECT COS(RADIANS(latitude)) as Lat
FROM tbl_geometry;
Run Code Online (Sandbox Code Playgroud)
但是我遇到一个错误:
将数据类型varchar转换为float时出错。
我的尝试:
尝试1:
select Cos(convert(float, (Radians(convert(float, latitude))))) as Lat
from tbl_geometry;
Run Code Online (Sandbox Code Playgroud)
尝试#2。
select Cos(Radians(convert(float, latitude))) as Lat
from tbl_geometry;
Run Code Online (Sandbox Code Playgroud)
两次尝试都会导致相同的错误。
注意:列Latitude的类型为varchar。
我的表格有两列cola和colb.
我想使用存储过程从表中选择列。
注意:由于返回类型,我不想使用函数。
尝试:
CREATE OR REPLACE PROCEDURE public.sptest()
LANGUAGE sql
AS $BODY$
select cola from test;
$BODY$;
Run Code Online (Sandbox Code Playgroud)
调用程序:
call sptest()
Run Code Online (Sandbox Code Playgroud)
输出:
数据输出中没有任何内容。
消息窗口显示:
CALL
Query returned successfully in 147 msec.
Run Code Online (Sandbox Code Playgroud)