内联SQL错误

时间:2013-11-18 18:37:50

标签: sql sql-server tsql sql-server-2000

我是新手使用内联sql但在关键字“更新”错误附近不断获取错误的语法。

这是我正在使用的语法,有人可以指出(可能是一个非常非常新手的问题导致了这个问题吗?)

Declare @MyField As varchar(100)
Declare @Sql As nvarchar(1000)

Create Table #TableNames
(
 TableName varchar(50)
)

Insert Into #TableNames(TableName)
Values('Pixel')
Values('HellFire')

Declare curX Cursor for Select TableName from #TableNames
Open curX
Fetch Next from curX Into @MyField
While @@ Fetch_Status <> -1
Begin

Set @Sql = N'(Update (trixieIce.dbo.' + @FieldName + N' Set Shipped = 'Yes' ShippedDate = GetDate() WHERE ShippedDate IS NULL And Shipped IS NULL)'

Exec sp+executesql @SQL
Fetch next from curX into @FieldName
End

Close curX
Deallocate curX

2 个答案:

答案 0 :(得分:1)

我必须假设您正在努力实现动态SQL 。如果是这样,那就是:

Declare @MyField As varchar(100)
Declare @Sql As nvarchar(1000)

Set @Sql = N'Update trixieIce.dbo.' + @MyField
           + N' Set Shipped = ''Yes'', ShippedDate = GetDate()'

然后,您可以使用EXEC(@Sql)执行它。

您还应该知道,如果@MyField实际上是您从客户端应用程序接收的prarmeter,它需要正确验证,否则您将容易受到SQL注入攻击。这在此解释:https://stackoverflow.com/a/1246848/109122

答案 1 :(得分:0)

我认为你没有关闭所有的()

Declare @MyField As varchar(100)
Declare @Sql As nvarchar(1000)

Set @Sql = (Update **(**trixieIce.dbo.' + @FieldName + ' Set Shipped = 'Yes' ShippedDate = GetDate())

你打开了那个,但没有关闭。 另外a,在设置字段中的字段

将@MyField声明为varchar(100)     将@Sql声明为nvarchar(1000)

Set @Sql = (Update **(**trixieIce.dbo.' + @FieldName + ' Set Shipped = 'Yes', ShippedDate = GetDate())