[英]SQL Server : how to declare a variable in stored procedure
我需要开发存储过程的帮助,该存储过程具有来自两个不同服务器的选择查询联接表。
例:
CREATE PROCEDURE [dbo].[test proc]
DECLARE @customerid INT
SELECT OL.CUSTOMER_ID
FROM CUSTOMERS C
JOIN SERVER2.ORDER.ORDERLIST OL ON C.ID = OL.CUSTOMER_ID
WHERE OL.CUSTOMER_ID = @customerid
CUSTOMERS
表位于Server1
, CUSTOMER
数据库上 ORDERLIST
表位于Server 2
ORDER
数据库上 它们是链接服务器。
该存储过程将在Server1
的Customer
数据库中。
我可以将server2
变量吗? 因为我需要用户在运行存储过程时指定服务器名称和customerid
。 我需要能够在生产和测试环境中执行的存储过程。 还是我应该怎么做?
您需要使用动态SQL:
create PROCEDURE [dbo].[test proc] (
@customerid int,
@server2 sysname -- or you can use nvarchar(255)
)
begin
declare @sql nvarchar(max);
set @sql = '
SELECT OL.CUSTOMER_ID
FROM CUSTOMERS C JOIN
@SERVER2.ORDER.ORDERLIST OL
ON C.ID = OL.CUSTOMER_ID
WHERE OL.CUSTOMER_ID = @customerid';
set @sql = replace(@sql '@SERVER2', @server2);
exec sp_executesql @sql,
N'@customerid int',
@customerid=@customerid;
end;
sp_executesql
允许您替换动态SQL中的常量值。 但是,不允许您更改标识符,例如服务器名称,这就是为什么要使用replace()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.