繁体   English   中英

SQL Server:如何在存储过程中声明变量

[英]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表位于Server1CUSTOMER数据库上
  • ORDERLIST表位于Server 2 ORDER数据库上

它们是链接服务器。

该存储过程将在Server1Customer数据库中。

我可以将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM