2013-11-27 88 views
5

我正在编写一个存储过程,并将表名称作为参数传递,但是我在这里有一个错误部分:SQL Server:Msg 102,Level 15,State 1,Line 2在'='附近的语法不正确

DECLARE 
@TableA nvarchar(255)='TableA', 
@DOCID1 nvarchar(MAX), 
@DOCID2 int; 

EXEC (' 
SELECT TOP (1) '+ @DOCID1 +'=DOCID1,'+ @DOCID2 +'=DOCID2 
FROM [' + @TABLEA + '] 
ORDER BY DOCID2') 

我运行此查询后,我得到这个错误:

Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '='

我都试过,我不能查明错误,在这一点上我需要一些帮助..

回答

2

我相信你有串联在一起,你的SQL语句作为一个整体,执行前:

DECLARE 
    @TableA nvarchar(255)='TableA', 
    @DOCID1 nvarchar(MAX), 
    @SqlStmt NVARCHAR(500), 
    @DOCID2 int; 

SET @SqlStmt = N'SELECT TOP (1) ' + @DOCID1 + N' = DOCID1, ' + @DOCID2 + N' = DOCID2 FROM [' + @TABLEA + N'] ORDER BY DOCID2'; 

EXEC (@SqlStmt) 

至于我记得,你不能有EXEC命令内的表达式和计算 - 拿到手之前准备语句,然后执行它

此外,我不完全确定你的变量是什么 - @DocID1@DocID2 - 你想设置它们的值,还是保存另一个变量的名称来设置?

更新:,如果你真的想设置的@DocID1@DocID2的值,然后将查询是错误的开始 - 那么你需要的东西是这样的:

DECLARE 
    @TableA nvarchar(255) = 'TableA', 
    @SqlStmt NVARCHAR(500); 

SET @SqlStmt = 
    N'DECLARE @DocID1 NVARCHAR(MAX), @DocID2 INT; ' + 
    N'SELECT TOP (1) @DOCID1 = DOCID1, @DOCID2 = DOCID2 FROM [' + @TABLEA + N'] ORDER BY DOCID2'; 

EXEC (@SqlStmt) 

但随后,这两个变量在的范围内有动态执行的SQL,并且不可用于脚本的“外部”。

+0

我只是想从select的结果中设置它们的值。 – RicEspn

+0

明白了,感谢您的帮助Marc_s – RicEspn

1

什么版本的SQL Server?该语法时才 -

DECLARE 
@TableA nvarchar(255)='TableA' 

从SQL Server 2008中仅支持老版本的,你必须写:

DECLARE 
@TableA nvarchar(255) 
SET @TableA ='TableA' 
+0

SQL SERVER 2008 – RicEspn

相关问题