如何将表名用作存储过程中的参数?
我这样做但是我收到了错误
ALTER PROCEDURE [dbo].[usp_TablesReporting_GetTableData]
@tableName as VARCHAR(100)
AS
BEGIN
SELECT * FROM @tablename
END
错误:
必须声明表变量“@tableName”
答案 0 :(得分:2)
试试这个
DECLARE @cmd AS NVARCHAR(max)
SET @cmd = N'SELECT * FROM ' + @table_name
EXEC sp_executesql @cmd
答案 1 :(得分:1)
这种格式不可能。您需要将变量嵌入到动态SQL中并执行它。
DECLARE @TABLENAME NVARCHAR(100), @SQL NVARCHAR(4000)
SET @TABLENAME = 'myTable'
SET @SQL = 'SELECT * FROM ' + @TABLENAME
EXEC SP_EXECUTESQL @SQL
答案 2 :(得分:1)
您可以执行以下操作:
ALTER PROCEDURE [dbo].[usp_TablesReporting_GetTableData]
@tableName AS VARCHAR(100)= NULL -- NULL default value
AS
DECLARE @query AS NVARCHAR(max)= 'SELECT * FROM ' + @tablename
-- Validate the @tablename parameter.
IF @tablename IS NULL
BEGIN
PRINT 'ERROR: You must specify the table name.'
RETURN
END
exec sp_executesql @query
RETURN
GO
在这里,我刚刚创建并执行了动态查询。
要使用SqlCMD模式以其他方式实现,您可以从here获取参考。