在存储过程中使用 varchar 变量写入 table 名称

Use of varchar variable in a stored procedure to write a table name

DECLARE @server_nm varchar(100)

IF (@@SERVERNAME LIKE 'DEVABCD%')
BEGIN
    SET @server_nm = 'DEVBCD.dbo'
END

SELECT * 
FROM @server_nm+'.tablename'

我想使用变量执行最后一行

SELECT * FROM DEVBCD.dbo.tablename

我无法在 SQL 服务器中执行此操作。谁能帮帮我?

您需要为此使用动态 SQL

DECLARE @server_nm sysname = N'';

IF (@@SERVERNAME LIKE 'DEVABCD%')
BEGIN
    SET @server_nm = N'DEVBCD'
END

DECLARE @sql nvarchar(max) = N'
SELECT *
FROM ' + QUOTENAME(@server_nm) + N'.dbo.tablename;
';

EXEC sp_executesql @sql;

注意使用 QUOTENAME 来引用服务器名称,并使用 sysname 作为变量类型。

老实说,考虑到这是一个单一的命令,我可能只使用带有两个静态命令的普通 IF

IF (@@SERVERNAME LIKE 'DEVABCD%')
    SELECT * 
    FROM DEVBCD.dbo.tablename;
ELSE
    SELECT * 
    FROM dbo.tablename;