我正在创建两个包含行和列的表。我创建了一个存储过程,动态获取表名并生成结果。
但是当我动态地传递表名时,它就不起作用了。
CREATE PROC spGetAll (@tableName varchar(50))
AS
BEGIN
SELECT
*
FROM @tableName
END
答案 0 :(得分:2)
只需使用动态SQL。例如:
CREATE PROC spGetAll (
@tableName SYSNAME)
AS
BEGIN
DECLARE @sql nvarchar(max)
IF EXISTS (SELECT name FROM sys.objects WHERE name = @tableName)
SET @sql = 'SELECT * FROM test.'+ QUOTENAME(@tableName)
EXEC(@sql) -- Or EXEC sp_executesql @sql
END
答案 1 :(得分:1)
这是一种方式。 。
IF @tableName = 't111'
SELECT * FROM t111
ELSE
SELECT * FROM t222