必须在 SQL 服务器中声明标量变量“ ”错误
Must declare the scalar variable ' ' error in SQL Server
我需要向 table 添加一个不为空且具有默认日期时间的新列。但我得到如下错误。我检查了多个实例,但出现错误。
DECLARE @SQL NVARCHAR(1000), @date NVARCHAR(1000);
SET @date = '9999-12-31 00:00:00.000'
SET @SQL = 'ALTER TABLE [spi].[ProductClass]
ADD lastUpdatedTime datetime NOT NULL
CONSTRAINT default_updateTime DEFAULT @date';
EXEC sp_executesql @SQL;
这是我得到的错误。
Must declare the scalar variable "@date".
有什么解决办法吗?
您正在寻找的内容如下所示,您可以通过串联
创建动态 SQL
DECLARE @SQL NVARCHAR(1000), @date NVARCHAR(1000);
SET @date = '9999-12-31 00:00:00.000'
SET @SQL = 'ALTER TABLE [spi].[ProductClass]
ADD lastUpdatedTime datetime NOT NULL
CONSTRAINT default_updateTime DEFAULT '''+ @date+'''';
EXEC sp_executesql @SQL;
如果您将 @date
替换为值,它将起作用。
但让我们看看为什么它不起作用。你的 SQL:
DECLARE @SQL NVARCHAR(1000), @date NVARCHAR(1000);
SET @date = '9999-12-31 00:00:00.000'
SET @SQL = 'ALTER TABLE [spi].[ProductClass]
ADD lastUpdatedTime datetime NOT NULL
CONSTRAINT default_updateTime DEFAULT @date';
EXEC sp_executesql @SQL;
声明了几个变量并执行其中一个变量代表的 SQL 块。你的问题是 sp_executesql
将一些文本读取为 SQL 并尝试 运行 它 - 如果你不能 运行 你告诉它给 运行 的内容,那么不能。
因此,如果您打开一个新查询 window 并尝试 运行:
ALTER TABLE [spi].[ProductClass]
ADD lastUpdatedTime datetime NOT NULL
CONSTRAINT default_updateTime DEFAULT @date
它会崩溃试图弄清楚 @date
应该是什么。
DECLARE @date NVARCHAR(1000);
SET @date = '9999-12-31 00:00:00.000';
ALTER TABLE [spi].[ProductClass]
ADD lastUpdatedTime datetime NOT NULL
CONSTRAINT default_updateTime DEFAULT @date;
会起作用,或者简单地说:
ALTER TABLE [spi].[ProductClass]
ADD lastUpdatedTime datetime NOT NULL
CONSTRAINT default_updateTime DEFAULT '9999-12-31 00:00:00.000';
因此,使用串联你可以做到:
DECLARE @SQL NVARCHAR(1000), @date NVARCHAR(1000);
SET @date = '9999-12-31 00:00:00.000'
SET @SQL = 'ALTER TABLE [spi].[ProductClass]
ADD lastUpdatedTime datetime NOT NULL
CONSTRAINT default_updateTime DEFAULT ' + @date;
EXEC sp_executesql @SQL;
这会给您带来不同的错误,因此请尝试在 date
变量中包含一对引号:
DECLARE @SQL NVARCHAR(1000), @date NVARCHAR(1000);
SET @date = '''9999-12-31 00:00:00.000'''
SET @SQL = 'ALTER TABLE [spi].[ProductClass]
ADD lastUpdatedTime datetime NOT NULL
CONSTRAINT default_updateTime DEFAULT ' + @date;
EXEC sp_executesql @SQL;
我需要向 table 添加一个不为空且具有默认日期时间的新列。但我得到如下错误。我检查了多个实例,但出现错误。
DECLARE @SQL NVARCHAR(1000), @date NVARCHAR(1000);
SET @date = '9999-12-31 00:00:00.000'
SET @SQL = 'ALTER TABLE [spi].[ProductClass]
ADD lastUpdatedTime datetime NOT NULL
CONSTRAINT default_updateTime DEFAULT @date';
EXEC sp_executesql @SQL;
这是我得到的错误。
Must declare the scalar variable "@date".
有什么解决办法吗?
您正在寻找的内容如下所示,您可以通过串联
创建动态 SQLDECLARE @SQL NVARCHAR(1000), @date NVARCHAR(1000);
SET @date = '9999-12-31 00:00:00.000'
SET @SQL = 'ALTER TABLE [spi].[ProductClass]
ADD lastUpdatedTime datetime NOT NULL
CONSTRAINT default_updateTime DEFAULT '''+ @date+'''';
EXEC sp_executesql @SQL;
如果您将 @date
替换为值,它将起作用。
但让我们看看为什么它不起作用。你的 SQL:
DECLARE @SQL NVARCHAR(1000), @date NVARCHAR(1000);
SET @date = '9999-12-31 00:00:00.000'
SET @SQL = 'ALTER TABLE [spi].[ProductClass]
ADD lastUpdatedTime datetime NOT NULL
CONSTRAINT default_updateTime DEFAULT @date';
EXEC sp_executesql @SQL;
声明了几个变量并执行其中一个变量代表的 SQL 块。你的问题是 sp_executesql
将一些文本读取为 SQL 并尝试 运行 它 - 如果你不能 运行 你告诉它给 运行 的内容,那么不能。
因此,如果您打开一个新查询 window 并尝试 运行:
ALTER TABLE [spi].[ProductClass]
ADD lastUpdatedTime datetime NOT NULL
CONSTRAINT default_updateTime DEFAULT @date
它会崩溃试图弄清楚 @date
应该是什么。
DECLARE @date NVARCHAR(1000);
SET @date = '9999-12-31 00:00:00.000';
ALTER TABLE [spi].[ProductClass]
ADD lastUpdatedTime datetime NOT NULL
CONSTRAINT default_updateTime DEFAULT @date;
会起作用,或者简单地说:
ALTER TABLE [spi].[ProductClass]
ADD lastUpdatedTime datetime NOT NULL
CONSTRAINT default_updateTime DEFAULT '9999-12-31 00:00:00.000';
因此,使用串联你可以做到:
DECLARE @SQL NVARCHAR(1000), @date NVARCHAR(1000);
SET @date = '9999-12-31 00:00:00.000'
SET @SQL = 'ALTER TABLE [spi].[ProductClass]
ADD lastUpdatedTime datetime NOT NULL
CONSTRAINT default_updateTime DEFAULT ' + @date;
EXEC sp_executesql @SQL;
这会给您带来不同的错误,因此请尝试在 date
变量中包含一对引号:
DECLARE @SQL NVARCHAR(1000), @date NVARCHAR(1000);
SET @date = '''9999-12-31 00:00:00.000'''
SET @SQL = 'ALTER TABLE [spi].[ProductClass]
ADD lastUpdatedTime datetime NOT NULL
CONSTRAINT default_updateTime DEFAULT ' + @date;
EXEC sp_executesql @SQL;