在存储过程中使用 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;
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;