我创建了一个程序,其代码如下:
Create PROCEDURE Sample( @ID INT )
AS
BEGIN
DECLARE @SQL NVARCHAR(max)
DECLARE @SchemaName SYSNAME
DECLARE @TableName SYSNAME
DECLARE @DatabaseName SYSNAME
SELECT @SQL = 'Create Table ' + @DatabaseName + '.'
+ @SchemaName + '.' + @TableName
+ '_temp' + '('
SELECT @SQL = @SQL + 'ID int NOT NULL Primary Key, Name VarChar(10))'
我总是得到错误:
Msg 102,Level 15,State 1,Line 77 ','附近的语法不正确。
有人可以帮我吗?
答案 0 :(得分:3)
你的字符串文字有一个不幸的长度。从varchar
到nvarchar
的隐式字符串转换会截断长度介于4000到8000个字符到4000个字符的字符串。
在字符串文字之前使用N
前缀以避免隐式字符串转换。
答案 1 :(得分:2)
请勿使用PRINT
。有可能PRINT
输出本身将被长文本截断。使用
SELECT @SQL as [processing-instruction(x)] FOR XML PATH
检查SSMS中此类变量的值。
答案 2 :(得分:0)
有时使用动态sql时,我发现打印变量很有帮助:
PRINT @SQL
这样你可以获取输出并在分析器中查看它
答案 3 :(得分:0)
我将@SQL的初始声明更改为DECLARE @SQL VARCHAR(max)
并且它有效(而不是NVARCHAR)。