我有一个动态查询,如下所示
Alter PROCEDURE dbo.mySP
-- Add the parameters for the stored procedure here
(
@DBName varchar(50),
@tblName varchar(50)
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
declare @string as varchar(50)
declare @string1 as varchar(50)
set @string1 = '[' + @DBName + ']' + '.[dbo].' + '[' + @tblName + ']'
set @string = 'select * from ' + @string1
exec @string
Run Code Online (Sandbox Code Playgroud)
结束
我这样打电话
dbo.mySP 'dbtest1','tblTest'
Run Code Online (Sandbox Code Playgroud)
我遇到了一个错误
"Msg 203, Level 16, State 2, Procedure mySP, Line 27
The name 'select * from [dbtest1].[dbo].[tblTest]' is not a valid identifier."
Run Code Online (Sandbox Code Playgroud)
怎么了?以及如何克服?
提前致谢
它认为内容是@string指存储过程名称.你需要把
EXEC (@string)
Run Code Online (Sandbox Code Playgroud)
或者更好地使用存储过程 sp_executesql
您还应该设置一些保护代码,以检查传入的值是真实表和数据库的名称.您可以在INFORMATION_SCHEMA中查询视图以验证输入.
您可以在我的博客上阅读有关更安全的动态SQL的更多信息.
| 归档时间: |
|
| 查看次数: |
4888 次 |
| 最近记录: |